Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z przetwarzaniem pliku, jak wziąć kolejną linijkę ?
Forum PHP.pl > Forum > Przedszkole
wasyleq
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 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
amii
Zainteresuj się funkcją file -> http://pl.php.net/manual/pl/function.file.php
wasyleq
Plik jest dosyć sporych rozmiarów,
nie chciałbym go całego pakować do tablicy,
jakieś inne rozwiązanie ?
muk4
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()
erix
Wywołaj fgets po prostu jeszcze raz. 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. winksmiley.jpg
muk4
@erix
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 biggrin.gif

Dla zainteresowanych
plik 30MB 312.000 linijek
file() - 0.30
fgets - 0.80
wasyleq
"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
erix
A czy łaskawie przejrzałeś, jakie funkcje plikowe istnieją w PHP? Chyba nie.
wasyleq
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
erix
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.
wasyleq
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).


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

http://forum.php.pl/index.php?s=&showt...st&p=764754
wasyleq
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 ?
erix
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...
wasyleq
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 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Ę"
thek
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.
wasyleq
Przerobiłem pętle, program już działa, przepraszam poniosło mnie.
Nie chciałem nikogo obrazić

wstydnis.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.