Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z przetwarzaniem pliku, jak wziąć kolejną linijkę ?
wasyleq
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Witam

Mam prosty skrypcik przetwarzający plik XML, wszystko już gra poza jednym
Pobieram plik komendą :

  1. $plik=fopen('nazwa.xml','r');
  2. while (!feof($plik)){
  3. przeglądam po kolei linijki, jeśli napotkam coś tam to przetwarzam
  4. Jeśli napotkam coś innego to przetwarzam
  5. ... itp
  6. }


Potrzebuję zrobić taki warunek:
  1. Jeśli bieżąca linijka = <produkt>, i następna RÓWNA SIĘ <zdjecie>, to "Jest zdjęcie !"
  2. ... A jeśli bieżąca linijka = <produkt> a w następnej NIE RÓWNA SIĘ <zdjecie>, to "nie ma zdjęcia !"
  3. if( stristr($linia_z_pliku, '<produkt') == TRUE ) AND ... i co tu dodać odnośine następnej linijki ... ?


Zawiesiłem się, proszę o pomoc (IMG:style_emoticons/default/smile.gif) Nie wiem w jaki sposób przetwarzając linijkę tymczasowo sprawdzić następną,
a następnie przejść do tej następnej i ją przetwarzać ... itd
Z góry dziękuję za wszelką pomoc
Go to the top of the page
+Quote Post
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Zainteresuj się funkcją file -> http://pl.php.net/manual/pl/function.file.php
Go to the top of the page
+Quote Post
wasyleq
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Plik jest dosyć sporych rozmiarów,
nie chciałbym go całego pakować do tablicy,
jakieś inne rozwiązanie ?
Go to the top of the page
+Quote Post
muk4
post
Post #4





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

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


Podobne działanie jak file - lepszy dla większych plików.

  1. $handle = fopen('nazwa_pliku', "r");
  2. if ($handle) {
  3. while (!feof($handle)) {
  4. $lines[] = fgets($handle, 4096);
  5. }
  6. fclose($handle);
  7. }
  8. //$lines to tablica taka jak zwracana przez file()


Ten post edytował muk4 10.07.2010, 12:08:52
Go to the top of the page
+Quote Post
erix
post
Post #5





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




Wywołaj fgets po prostu jeszcze raz. (IMG:style_emoticons/default/winksmiley.jpg)

Tylko wcześniej zapisz sobie do zmiennej bieżącą pozycję pliku i po sprawdzeniu warunku przesuń uchwyt na zapisaną pozycję.

Cytat
Podobne działanie jak file - lepszy dla większych plików.

Ciekawe, pod jakim względem - jeśli będziesz pisać DVPA zaczynając od A, to będzie dokładnie to samo, gdybyś zaczął pisząc od D. Dvpa, to dvpa i koniec. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
muk4
post
Post #6





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

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


@erix
(IMG:style_emoticons/default/smile.gif) Muszę przyznać ci rację. W internecie znalazłem informacje że ten kod jest szybszy od file, a jednak różnica jest ogromna. Widać, nie można wierzyć we wszystko póki się samemu nie sprawdzi (IMG:style_emoticons/default/biggrin.gif)

Dla zainteresowanych
plik 30MB 312.000 linijek
file() - 0.30
fgets - 0.80

Ten post edytował muk4 10.07.2010, 13:02:56
Go to the top of the page
+Quote Post
wasyleq
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


"Tylko wcześniej zapisz sobie do zmiennej bieżącą pozycję pliku i po sprawdzeniu warunku przesuń uchwyt na zapisaną pozycję."

A w jaki sposób zapiać bieżącą pozycję ?
Jakaś wskazówka byłaby mile widziana
Go to the top of the page
+Quote Post
erix
post
Post #8





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




A czy łaskawie przejrzałeś, jakie funkcje plikowe istnieją w PHP? Chyba nie.
Go to the top of the page
+Quote Post
wasyleq
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Kategoria forum to przedszkole,
Proszę więc o podanie linków które będą mi pomocne lub o nie pisanie niczego, bo to bez sensu.
Zrobiłem prosty licznik linii, zlicza bieżącą pozycję wiersza (do zmiennej $i).
Może ktoś mi powie w jaki sposób w środku programu odczytać linię o numerze $i+1 ?
Proszę o konkretne odpowiedzi (bez głupot w stylu poszukaj w manualu, bo już szukałem)

dziękuję za wszelką pomoc
Go to the top of the page
+Quote Post
erix
post
Post #10





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




Cytat
Kategoria forum to przedszkole,

Ale nie żłobek. A po przeczytaniu jakiegokolwiek kursu nie zadawałbyś w ogóle paru pytań.

Cytat
(bez głupot w stylu poszukaj w manualu, bo już szukałem)

Możemy to bardzo łatwo zweryfikować - w którym rozdziale szukałeś?

Cytat
Proszę o konkretne odpowiedzi (bez głupot w stylu

Cytat
Proszę więc o podanie linków które będą mi pomocne lub o nie pisanie niczego, bo to bez sensu.

Tutaj pomagamy, a nie dajemy gotowce; te drugie, to nie ten dział. A programista nie mający zmysłu choć prób szukania absolutnie się do tego nie nadaje. Tak mocne słowa, ale taka prawda.

I zadam główne pytanie w tym poście: z czym KONKRETNIE masz problem, czego KONKRETNIE nie rozumiesz, co KONKRETNIE sprawia Ci trudność? Tylko nie odpowiadaj, że wszystko/wszystkiego, bo forum, to nie firma prowadząca szkolenia.
Go to the top of the page
+Quote Post
wasyleq
post
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Napisałem konkretnie, nie chcę gotowca, przecież nie napisałem treści mojego skryptu i nie prosiłem o przeróbkę.

Moje pytanie brzmiało:
"Zrobiłem prosty licznik linii, zlicza bieżącą pozycję wiersza (do zmiennej $i).
Może ktoś mi powie w jaki sposób w środku programu odczytać linię o numerze $i+1 ?"

A czytam tylko stronę php.net i jedyne o co proszę to o podanie nazwy pomocnych mi komend.
Jak już mówiłem wolałbym nie robić tablicy jeśli nie muszę.

Czytałem o funkcji file, fgets itp, wszystko działa w moim skrypcie, jednakże nie mam bladego pojęcia jak w trakcie trwania pętli
sprawdzić zawartość następnej linii (wiersza), jak wspomniałem zrobiłem już licznik linii, ale nie wiem jaką komendą wywołać
skok do `$i+1` linii. Pytanie nie jest skomplikowane, proszę tylko o wskazanie mi drogi (czyli podanie pomocnej komendy lub
stronki, gdyż przeszukiwałem google i jak na razie nie znalazłem nic pomocnego).


Go to the top of the page
+Quote Post
erix
post
Post #12





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




Hmm, a przeczytałeś pierwszego mojego posta w tym wątku?

http://forum.php.pl/index.php?s=&showt...st&p=764754
Go to the top of the page
+Quote Post
wasyleq
post
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Oczywiście że przeczytałem i z tego co zrozumiałem to podaje się
string fgets ( resource $uchwyt [, int $długość ] )
a zmienną długość to rozumiem jako rozmiar pliku w formacie HEX
Czy rozumiem to właściwie ?
Go to the top of the page
+Quote Post
erix
post
Post #14





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




Może jednak najpierw jakiś kurs przeczytaj, bo nie znajdziemy wspólnego języka, a to elementarz...

A nie chodzi o to, co przepisałeś z manuala, tylko DZIAŁANIE, co głównie robi. Ale jeśli nie opanujesz podstaw, to nie będziemy mogli nawet w pseudojęzyku porozmawiać, którego - zresztą - w pierwszym poście użyłem...
Go to the top of the page
+Quote Post
wasyleq
post
Post #15





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Sorki ale sam sobie poradzę w takim razie
Już zrobiłem co chciałem w inny zupełnie sposób.

Nie rozumiem sensu forum jeśli nikt nie chce pomagać w normalny sposób (IMG:style_emoticons/default/sad.gif)

Pytania zadawałem normalne, odpowiedzi nie było żadnej konkretnej.

Pytania były, odpowiedzi nie było, i niestety na każde pytanie dostawałem obraźliwą odpowiedź.

Jestem spokojną osobą która nieraz szuka pomocy, nie wiem co w Was wstąpiło że nie chcecie mi pomóc ?

Sam wymyśliłem inny algorytm który zrobi co chcę, więc "DZIĘKUJĘ BARDZO, POSTOJĘ"

Ten post edytował wasyleq 17.07.2010, 09:43:03
Go to the top of the page
+Quote Post
thek
post
Post #16





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Cytat
Nie rozumiem sensu forum jeśli nikt nie chce pomagać w normalny spozób
Pomagać to nie znaczy dać gotowca.
I wbij to sobie do głowy. Forum ma na celu naprowadzenie na rozwiązanie, pomoc w dojściu do niego. Jeśli ktoś szuka gotowych rozwiązań niech zbiera kasę i daje zlecenia. Dano Ci podpowiedź dla fgets, choć kompletnie nikt nie wiedział jakim sposobem pobierasz linie z pliku, bo nie raczyłeś tego w temacie powiedzieć, a jest kilka sposobów. Skoro z Twojej strony brakło pewnych danych to czemu z naszej strony oczekiwałeś dokładniejszej informacji? Tylko +/- można było wnioskować, że zrobiłeś JAKIŚ tam bufor danych, który numerujesz. Szklane kule się niestety nam potłukły wszystkim.
Inna sprawa, że ani jedna wypowiedź w temacie nie jest "obraźliwa" poza "cmoknij mnie w d." w Twoim poście. Zwrócenie uwagi na braki w znajomości funkcji i wskazanie konkretne w jakim dziale (funkcje plikowe) dalekie jest od ubliżania. Jeśli nie potrafisz przyjąć do siebie uwag, nie nauczysz się wiele, bo każdą radę nie będącą gotowcem przyjmiesz jako atak na Ciebie.
Go to the top of the page
+Quote Post
wasyleq
post
Post #17





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 10.07.2010

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


Przerobiłem pętle, program już działa, przepraszam poniosło mnie.
Nie chciałem nikogo obrazić

(IMG:style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post

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: 22.08.2025 - 23:04