Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Import określonych danych z pliku *.txt, kursy średnie z NBP / wykresy NBP
websterPL
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


Witam,
chciałbym pobrać z pliku http://nbp.pl/Kursy/xml/dir.txt nazwy zaczynające się od litery "a" (są to nazwy plików *.xml - kursy średnie) i wyświetlić te wszystkie nazwy (z ostatnich 30 dni). Ostatni wpis w pliku *txt to najnowszy plik (dzisiejszy). I wykombinowałem taki kod:

  1. $subject = file_get_contents('http://nbp.pl/Kursy/xml/dir.txt');
  2. $pattern = '/^a\d{3}z\d{6}/';
  3. preg_match_all($pattern, $subject, $matches);
  4. print_r($matches);


W wyniku otrzymuję niestety tylko 1 rekord (do tego najstarszy). Czy ktoś wie jak za to się zabrać ?

Ten post edytował websterPL 11.08.2009, 15:42:37
Go to the top of the page
+Quote Post
golaod
post
Post #2





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  2.  
  3. preg_match_all( '/(^a.+)/mi', $file, $pregs );
  4. print_r( $pregs );
Go to the top of the page
+Quote Post
Wicepsik
post
Post #3





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Usuń ^ z początku.
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Znaczy, nie usuń, a wyciągnij przed nawias. ;]
Go to the top of the page
+Quote Post
websterPL
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


Fajnie, działa - pobiera wszystkie rekordy zaczynąjące się od litery "a" !
Nie wiem dlaczego, ale wynik kodu wyświetla się 3 razy (IMG:style_emoticons/default/worriedsmiley.gif)

  1.  
  2. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  3. preg_match_all( '/^(a.+)/mi', $file, $pregs );
  4. print_r( $pregs );
  5.  


Teraz pytanie jak zrobić aby zaczął zczytywać plik *.txt od końca i np tylko 30 wartości ?



Ten post edytował websterPL 12.08.2009, 09:03:10
Go to the top of the page
+Quote Post
kriszna
post
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


  1. for($i=count($pregs)-1; $i>=count($pregs)-31, $i--){
  2. echo $pregs[$i];
  3. }

Daj tą pętle zamiast var_dump(). Może coś nie działać, bo nie testowałem, ale ogólny zarys jest.
Go to the top of the page
+Quote Post
websterPL
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


Dzięki za błyskawiczną odpowiedź. W pętli for zapomniałeś o średniku i tak kod:

  1.  
  2. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  3. preg_match_all( '/^(a.+)/mi', $file, $pregs );
  4.  
  5. for ($i=count($pregs)-1; $i>=count($pregs)-31; $i--){
  6. echo $pregs[$i];
  7.  


daje w wyniku: "ArrayArray" i nic więcej (IMG:style_emoticons/default/sadsmiley02.gif)

Ten post edytował websterPL 12.08.2009, 09:13:27
Go to the top of the page
+Quote Post
Kofel
post
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 22
Dołączył: 14.12.2007
Skąd: Wyszków

Ostrzeżenie: (0%)
-----


Zamiast echo daj var_dump i zobacz jak wygląda tablica
Go to the top of the page
+Quote Post
websterPL
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


wynik wykorzystania var_dump (kilka rekordów od końca):

(...)
"a151z090805 " [1921]=> string(12) "a152z090806 " [1922]=> string(12) "a153z090807 " [1923]=> string(12) "a154z090810 " [1924]=> string(12) "a155z090811 " } NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


w $matches[1][$i] bedziesz mial kolejne nazwy plikow
1 -- pierwszy nawias (...) uzyty w pregu
Go to the top of the page
+Quote Post
websterPL
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


ok, po użyciu kodu:

  1.  
  2. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  3. preg_match_all( '/^(a.+)/mi', $file, $pregs );
  4.  
  5. for ($i=count($pregs)-1; $i>=count($pregs)-31; $i--){
  6. echo $pregs[1][$i];
  7. }
  8.  


otrzymuje dokładnie:

a002z020103
a001z020102

czyli drugi i pierwszy wpis z literą "a" z pliku *.txt.

Pytanie jak wyciągnąć ostatnie wpisy z literą "a" czyli przykładowo:

a151z090805
a152z090806
a153z090807
a154z090810
a155z090811
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


count( $pregs[1] )
a nie
count( $pregs )

przeciez zagladales do tabeli print_r()'em
Go to the top of the page
+Quote Post
websterPL
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


faktycznie ... dzięki wielkie wszystko teraz działa poprawnie (IMG:style_emoticons/default/exclamation.gif)

Ok już mam wszystkie adresy *.xml ale mam problem z pobraniem danych.

  1.  
  2. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  3. preg_match_all('/^(a.+)/mi', $file, $pregs );
  4.  
  5. for ($i=count($pregs[1])-1; $i>=count($pregs[1])-31; $i--){
  6.  
  7. $plik = $pregs[1][$i];
  8. $przetworzony = substr($plik, 0, -1);
  9. $koncowy = $przetworzony.'.xml';
  10. $sciezka_xml = 'http://nbp.pl/Kursy/xml/'.$koncowy;
  11.  
  12. $get_xml = file_get_contents($sciezka_xml);
  13. $tresc_xml = new SimpleXMLElement($get_xml);
  14. foreach ($tresc_xml->rekord as $rekord) {
  15.  
  16. echo 'USD: '.$rekord->kod_waluty.$rekord->kurs_sredni.'<br /><br />';
  17.  
  18. }
  19.  
  20. }
  21.  


Powyższy kod w zamyśle ma pobierać dane np z pliku http://nbp.pl/Kursy/xml/a156z090812.xml (zmienna $sciezka_xml) ale nic się nie wyświetla. Co jest nie tak ?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A skad wyczraowales taga <rekord> w XMLu z kursem??
Go to the top of the page
+Quote Post
websterPL
post
Post #15





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


A faktycznie ! (IMG:style_emoticons/default/smile.gif) Teraz śmiga aż miło.

  1.  
  2. $file = file_get_contents( 'http://nbp.pl/Kursy/xml/dir.txt' );
  3. preg_match_all('/^(a.+)/mi', $file, $pregs );
  4.  
  5. for ($i=count($pregs[1])-1; $i>=count($pregs[1])-31; $i--){
  6.  
  7. $plik = $pregs[1][$i];
  8. $przetworzony = substr($plik, 0, -1);
  9. $koncowy = $przetworzony.'.xml';
  10. $sciezka_xml = 'http://nbp.pl/Kursy/xml/'.$koncowy;
  11.  
  12. echo '<br />'.$sciezka_xml.'<br />';
  13.  
  14. $get_xml = file_get_contents($sciezka_xml);
  15. $tresc_xml = new SimpleXMLElement($get_xml);
  16. foreach ($tresc_xml->pozycja as $pozycja) {
  17.  
  18. if ($pozycja->kod_waluty == 'USD')
  19. echo 'USD: '.$pozycja->kod_waluty.$pozycja->kurs_sredni.'<br />';
  20.  
  21. }
  22. }
  23.  


Ciągnąc ten wątek dalej - jak wyciągnąć datę z pliku *.xml ( http://nbp.pl/Kursy/xml/a156z090812.xml ) ?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


$data = (string)$tresc_xml->data_publikacji;
Go to the top of the page
+Quote Post
websterPL
post
Post #17





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


Wielkie dzięki, teraz to już wszystko jest ok. Super !

I znowu mały problem. Jestem już przy końcu budowania wykresu. Ale pytanie dotyczy innej kwestii.
  1.  
  2. $ydata = array(2.2413,2.5413,2.3413, 2.7413);
  3.  


Chcę w $ydata powrzucać po kolei (w pętli) kursy średnie walut ($pozycja->kurs_sredni), jak to zrobić ?
Go to the top of the page
+Quote Post
Fifi209
post
Post #18





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


  1. $ydata[] = $kurs;

tak w skrócie.

Ten post edytował fifi209 12.08.2009, 15:10:12
Go to the top of the page
+Quote Post
websterPL
post
Post #19





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 11.08.2009

Ostrzeżenie: (0%)
-----


Tak też miałem zrobione

  1.  
  2. $ydata[] = $pozycja->kurs_sredni;
  3.  


ale w wyniku otrzymuje: Array ( [0] => SimpleXMLElement Object ( [0] => 2,9795 ) i tak dalej ...
chciałbym wyciągnąć te dane aby otrzymać coś co łatwo wywołać czyli: array(2.2413,2.5413,2.3413, 2.7413);
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A o czym ~dr_bonzo pisał? Bądź konsekwentny...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 23:45