Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [GPW] Jak pobrać wybrane dane z pliku txt ?
free
post
Post #1





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Na stronie parkiet.pl jest link do danych z sesji giełdy.
Chciałbym z tego całego tekstu wybrac np dla wartosci :
WIG,20070517,59764.2,60247.23,59218.2,59350.3,56311389
jedynie 59764.2
Jakich funkcji użyć ?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


google.pl->wyrazenia regularne php
Go to the top of the page
+Quote Post
free
post
Post #3





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Wiem co to sa wyrazenia regularne. Nie wiem natomiast z jakiej funkcji skorzystac by wydobyc dane ze srodka txt : WIG,20070517,59764.2,60247.23,59218.2,59350.3,56311389
Go to the top of the page
+Quote Post
kubarek
post
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 19.02.2007

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


użyj funkcji preg_match_all
Go to the top of the page
+Quote Post
free
post
Post #5





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Mozesz mała podpowiedź ?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





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

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


free: skoro znasz wyrazenia regularne i masz manuala do php i znasz nazwe funkcji (preg_match tez moze byc) to juz wiesz jak to masz zrobic.

Mozesz tez uzyc explode().
Go to the top of the page
+Quote Post
webdice
post
Post #7


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Cytat(free @ 18.05.2007, 15:32:15 ) *
Wiem co to sa wyrazenia regularne. Nie wiem natomiast z jakiej funkcji skorzystac by wydobyc dane ze srodka txt : WIG,20070517,59764.2,60247.23,59218.2,59350.3,56311389


file_get_contents" title="Zobacz w manualu PHP" target="_manual plus jak napisał ~dr_bonzo explode" title="Zobacz w manualu PHP" target="_manual, ewentualnie przyda Ci się jeszcze pętla.

Ten post edytował webdicepl 18.05.2007, 18:24:46
Go to the top of the page
+Quote Post
free
post
Post #8





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Funkcja file_get_contents okazała sie bardzo przydatna. Nie wiem jak optymalnie z tego ciagu znakow wydobyc interesującą mnie linijke:

WIG,20070517,59764.2,60247.23,59218.2,59350.3,56311389

jak to bede mial ją już w zmiennej to sobie poradzę bo użyję:

  1. <?php
  2. $data = "WIG,20070517,59764.2,60247.23,59218.2,59350.3,56311389";
  3. list($nazwa, $wolumen, $aktual, $max, $min, $ostatnio, $ilosc) = explode(",", $data);
  4. echo $nazwa; // otrzymam WIG
  5. echo $aktual; // otryzmam 59764.2
  6. ?>

A tak sie zastanawiam jak najoptymalniej z tego ciągu znaków wydobyć te linijkę
Go to the top of the page
+Quote Post
webdice
post
Post #9


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




a jakie inne dane masz w tym pliku?
Go to the top of the page
+Quote Post
free
post
Post #10





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Podałem link
A oto część danych z tego pliku :
Kod
...
LDS,20070518,1.17,1.17,1.17,1.17,4353
WIG,20070518,59457.59,59952.26,59409.38,59952.26,60590951
WIG20,20070518,3490.02,3516.38,3477.79,3515.77,666856
mWIG40,20070518,5116.26,5194.57,5115.34,5194.57,8198479
...

I chce wydobyć np linijkę WIG,20070518,59457.59,59952.26,59409.38,59952.26,60590951
Go to the top of the page
+Quote Post
Ludvik
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Otworzyć plik funkcją file" title="Zobacz w manualu PHP" target="_manual. Jeżeli chcesz wyciągnąć WIG, to po prostu sprawdzasz po kolei, która linijka zaczyna się od "WIG,". Można to zrobić funkcją substr" title="Zobacz w manualu PHP" target="_manual na przykład... Jeżeli nie chcesz całego pliku do tablicy pchać, to musisz sobie utworzyć bufor, do którego po kolei będziesz zczytywał całe linijki...
Go to the top of the page
+Quote Post
free
post
Post #12





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


substr tu nie pomoze, bo ten plik jest zmienny co 15 minut sie zmienia i linijki tez sie zmienia.
ale stala jest nazwa poszczegolnych np WIG itp
Wiec tu trzeba by raczej poprzez wyrazenia regualrne i z tym mam teraz najwiekszy problem.
Go to the top of the page
+Quote Post
Ludvik
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


W tym rzecz, że pomoże... Otwierasz plik funkcją file" title="Zobacz w manualu PHP" target="_manual, która zwraca tablicę, w której dostajesz plik rozłożony na linie. Następnie po kolei sprawdzasz każdą linijkę czy zawiera na początku "WIG,", jeżeli tak, to rozkładasz ją i masz wynik jaki chciałeś.

  1. <?php
  2.  
  3. $lines = file('http://www.parkiet.com/dane/danesesji/akcje.prn');
  4.  
  5. $line = '';
  6.  
  7. for ($i = 0, $count = count($lines); $i < $count; $i++) {
  8. if (substr($lines[$i], 0, 4) == 'WIG,') {
  9. $line = $lines[$i];
  10. break;
  11. }
  12. }
  13.  
  14. var_dump(explode(',', $line));
  15.  
  16. ?>
Go to the top of the page
+Quote Post
free
post
Post #14





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Rzeczywiście działa. Jak używam funkcji file_get_contents zamiast file to nie działa /czemu tak sie dzieje?/

Nie rozumiem za bardzo lini nr 5 -- czemu deklarujemy zmienna z pustym polem $line = ''; Dlatego ze w naszym przypadku linie sa tak od siebie oddzielone ?

W lini 8 na sztywno definiowane jest ilosc liter na 4 wraz z przecinkiem :
  1. <?php
  2. if (substr($lines[$i], 0, 4) == 'WIG,') {
  3. ?>

czy mozna by to jakos obejsc, by skrypt nie byl zalezny od tej liczby tylko automatycznie pobieral całą linię, gdzie jest słowo w naszym przypdaku WIG ? Chcialbym to rozwinac do dynamicznego wyswietlania wartosci i zamiast WIG skrypt bedzie pobieral nazwe ze zmiennej, ale do tego potrtzebne jest obejscie sztywno deklarowanej wartości substr($lines[$i], 0, 4)
Go to the top of the page
+Quote Post
Ludvik
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


1. Bo funkcja file zwraca tablicę, a fil_get_contents treść pliku w postaci stringa...
2. Deklarujemy pustą zmienną $line, żeby nie tworzyć jej w pętli - inny zakres...
3. To tylko sprawdzenie od czego zaczyna się ta linijka, żeby wybrać odpowiednią. A są trzy litery i przecinek, żeby nie pobrać przypadkiem WIG20...

Musisz mieć zapisane nazwy indeksów gdzieś, to po pierwsze. A z resztą, najlepiej popatrzeć na kod...
  1. <?php
  2.  
  3. $lines = file('http://www.parkiet.com/dane/danesesji/akcje.prn');
  4.  
  5. $index = 'WIG20';
  6. $line = '';
  7.  
  8. $start = $index . ','. // Dodajemy przecinek, żeby dokonać poprawnego sprawdzenia...
  9.  
  10. for ($i = 0, $count = count($lines); $i < $count; $i++) {
  11. if (substr($lines[$i], 0, strlen($start)) == $start) {
  12. $line = $lines[$i];
  13. break;
  14. }
  15. }
  16.  
  17. var_dump(explode(',', $line));
  18.  
  19. ?>


Regexem też można, tylko po co...
Go to the top of the page
+Quote Post
webdice
post
Post #16


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2. preg_match ('#WIG,([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^(n)]+)#', file_get_contents ('http://www.parkiet.com/dane/danesesji/akcje.prn'), $result);
  3.  
  4. print_r ($result);
  5. ?>
Go to the top of the page
+Quote Post
free
post
Post #17





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Ludvik dziekuje za wytlumaczenie. W 8 lini jest błąd poprawilem na $start = "$index.','.";
Po poprawieniu skrypt nie wyswietla danych wiec cos jest nie tak.

Webdicepl ciekawe rozwiazanei z wyrazeniem regularnym. Tyl;ko ze dane pokazuje w postaci tablicy Array. Gdy dodaje kod :
  1. <?php
  2. list($nazwa, $wolumen, $aktual, $max, $min, $ostatnio, $ilosc) = explode(",", $line);
  3. echo "<b>$nazwa </b><br />" ; 
  4. echo "Wolumen: $wolumen <br />";
  5. ?>

to jest niepoprawnie. gdy daje funkcje file zamiast file_get_contents pojawia sie blad-komunikat ze musi byc string w wartosci funkcji preg_match.
Go to the top of the page
+Quote Post
webdice
post
Post #18


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Nie mam teraz dostępu do PHP, ale robisz to mniej więcej tak:

  1. <?php
  2. $nazwa  = $result[0];
  3. $wolumen = $result[1];
  4. $aktual  = $result[2];
  5. $max = $result[3];
  6. //...
  7. ?>


EDIT: zobacz jak jest zbudowana tablica i przypisz wartości do zmienny podobnie jak podałem wyżej.

Ten post edytował webdicepl 21.05.2007, 13:22:15
Go to the top of the page
+Quote Post
Ludvik
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Racja, w ósmej linii jest błąd, ale powinien być poprawiony na:
  1. <?php
  2. $start = $index . ',';
  3. ?>
Go to the top of the page
+Quote Post
free
post
Post #20





Grupa: Zarejestrowani
Postów: 269
Pomógł: 0
Dołączył: 6.02.2006

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


Ludvik poprawiłem te linijke tak jak napisales i jest OK.
Webdicel czy twoja funkcje preg_match mozna zastapic inna by poznij uzyc funkcji file zamiast zwracajacej stringa file_get_contents ?
w dotychczasowym kodzie jest jakiś błąd logiczny bo otrzymuję zły wynik [0] w postaci tablicy :
Array ( [0] => WIG,20070521,60286.67,61050.47,60286.67,61050.47,61496700 [1] => 20070521 [2]
a przeciez [1] =>powinien byc WIG, [2]=>20070521
tymczasem do [1] przypisdane jest wszystko.
chyba w wyrazeniu regularnym jest cos nie tak.

Ten post edytował free 21.05.2007, 17:53:05
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: 23.08.2025 - 10:22