ďťż

[PHP] przetwarzanie pliku

       

Podstrony


telcocafe

tworzac galerie w php mam dodatkowy plik tekstowy "opis.txt", w którym mam umieszczony numer wraz z opisem każdego zdjęcia, czyli:
1 Zdjęcie z gór
2 Malowidło z wycieczki
3 Obrazek jakiś inny
itd...

i teraz dla zadanego numeru zdjęcia chcę pobrać z tego pliku odpowiedni opis dla tego zdjęcia, z tym że kod:
$uchwyt = fopen("./skrypty/opis.txt", "r"); while ($info = fscanf($uchwyt, "%d\t%s\n",$nr,$op)) { if($nr==$i) $wynik.=$op; } fclose($uchwyt);
zwraca mi jedynie pierwszy wyraz z odpowiedniego wiersza pliku, czyli np dla drugiego zdjecia zwróci jedynie "Malowidło".
jak to poprawić?



Nie wiem, czy zadowoli Ciebie to, ale to moja mała alternatywa ;)
$f = file('./skrypty/opis.txt'); for ($j=0; $j<count($f); $j++) { if ( ($t=trim($f[$j])) !='' && substr($t, 0, $p=strpos($t,' ')) == $i ) $wynik.=substr($t, $p+1, strlen($t)); }
Użytkownik DJ_ProG edytował ten post 25 luty 2008, 21:03
dzieki za pomoc,
ja tez wpadlem na pomysl i zrobilem to tak:
$uchwyt = fopen("./skrypty/opis.txt", "r"); $buf.=fread($uchwyt,1024); fclose($uchwyt); $a=strpos($buf,strval($i)); $b=strpos($buf,strval($i+1)); for($k=$a+2; $k<$b-2; $k++) { $wynik.=$buf[$k]; }
czyli do $wynik dodaje po kolei każdy znak, ale twój sposób jest chyba szybszy...

Na moje oko, to Twój kod pobiera jedynie 1024 pierwsze znaki z pliku (bo tak ustawiłeś) - jak robisz coś takiego, to pobiera się to w pętli, do EOF. Poza tym, IMO niepotrzebnie nawciskałeś tych instrukcji na stringu ;)

Jeśli chcesz by było jeszcze szybciej (i sprawdzało, czy np. linijka nie jest pusta oraz obcinala białe znaki ;))
to ew. użyj tego mojego kodu, tylko zamień$wynik.=substr($t, $p+1, strlen($t));na{ $wynik.=substr($t, $p+1, strlen($t)); break; }(po znalezieniu numerka i dopisania do zmiennej opisu, pętla jest przerywana, bo po co ma dalej szukać danych w pliku, skoro już je znalazła ;) taka optymalizacja jest dobra jeśli masz "sporo" linijek w pliku i tylko w jednej jest konkretna liczba :P).
Użytkownik DJ_ProG edytował ten post 27 luty 2008, 14:46



Nie wiem, czy zadowoli Ciebie to, ale to moja mała alternatywa ;)
$f = file('./skrypty/opis.txt'); for ($j=0; $j<count($f); $j++) {   if ( ($t=trim($f[$j])) !='' && substr($t, 0, $p=strpos($t,' ')) == $i )    $wynik.=substr($t, $p+1, strlen($t)); }


lepiej skorzystać z file i odwoływać się od razu do konkretnego indexu tablicy :)


lepiej skorzystać z file i odwoływać się od razu do konkretnego indexu tablicy :)
Chyba nie, szczególnie jak te liczby nie są przydzielanie automatycznie (zliczane i dodawana kolejna) - a tak sądzę po problemie :P

Nie masz pewności - nie ryzykuj :P
Zabezpieczaj się :)

@down: ale ID IDowi nie równy ;)
Użytkownik DJ_ProG edytował ten post 28 luty 2008, 17:30

Chyba nie, szczególnie jak te liczby nie są przydzielanie automatycznie
hm? wchodzisz na strone z ?id=5 gdzie id to numer foty pozniej pobierasz wpis o odpowiednim id z tablicy i juz :) fakt ze metoda nieoptymalna ale przy malej ilosci wpisow najwygodniejsza

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.