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 11.08.2009, 15:41:38
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 11.08.2009, 15:56:01
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 11.08.2009, 15:56:31
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 11.08.2009, 16:27:39
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. ;]


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 08:59:32
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 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 12.08.2009, 09:05:26
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 12.08.2009, 09:12:38
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 sadsmiley02.gif

Ten post edytował websterPL 12.08.2009, 09:13:27
Go to the top of the page
+Quote Post
Kofel
post 12.08.2009, 09:20:28
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 12.08.2009, 09:25:32
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 12.08.2009, 09:39:44
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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 09:57:25
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 12.08.2009, 10:08:19
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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 11:01:45
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 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 12.08.2009, 11:29:24
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??


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 11:59:47
Post #15





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

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


A faktycznie ! 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 12.08.2009, 12:12:41
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;


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 15:08:41
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 12.08.2009, 15:09:50
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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
websterPL
post 12.08.2009, 15:36:15
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 12.08.2009, 15:52:21
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...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.05.2024 - 23:02