Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [GPW] Jak pobrać wybrane dane z pliku txt ?
free
post 18.05.2007, 14:15:00
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
skowron-line
post 18.05.2007, 14:23:14
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


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
free
post 18.05.2007, 14:32:15
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 18.05.2007, 14:38:01
Post #4





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

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


użyj funkcji preg_match_all


--------------------
// ...
Co nieco o mnie ;)
Go to the top of the page
+Quote Post
free
post 18.05.2007, 15:11:36
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 18.05.2007, 15:21:04
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().


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
webdice
post 18.05.2007, 18:24:34
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 18.05.2007, 20:33:53
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 19.05.2007, 00:22:25
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 19.05.2007, 10:45:38
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 19.05.2007, 11:23:52
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 19.05.2007, 11:50:06
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 19.05.2007, 13:21:32
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 20.05.2007, 12:25:02
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 20.05.2007, 15:38:49
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 20.05.2007, 17:49:59
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 21.05.2007, 10:44:20
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 21.05.2007, 13:20:50
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 21.05.2007, 15:57:18
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 21.05.2007, 17:32:51
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 04:05