Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Numer linni z pliku - jak pobrać?
Forum PHP.pl > Forum > Przedszkole
axwell
Witam. Mam pewien plik dzialy.dat i zmienną $nazwa. Przykładowa truktura pliku, jednej linni to:

2||$nazwa||tekst1||tekst2[znak nowej linni]

Musze napisać skrypt, który za sprawą zmiennej $nazwa zwróci mi numer linijki, w którym $nazwa się zawiera. Przykład?

$linijka = [która linijka tekst]

dla $nazwa = 'jest' i dla takiego pliku działy.dat skrypt powinien zwrócić wartość 3 (bo w 3 linijce):

2||blabla||tekst1||tekst2[znak nowej linni]
78|baerew||tekst1||tekst2[znak nowej linni]
4||jest||tekst1||tekst2[znak nowej linni]
3||trybtr||tekst1||tekst2[znak nowej linni]

Czy ktoś wie jakbym mógł sie do tego zabrać wogóle?
wookieb
Tak. Potrzebne funkcje
http://php.net/file
http://php.net/strpos
przeszukujesz kazda linie i znajdujesz to co chcesz.
piotrooo89
nie rozumiem czy ta liczba na początku wskazuje nr linii? bo jak tak to wystarczy to explodem rozwalić.
axwell
Numerek na początku to nie numer linni, wtedy to by było zbyt proste tongue.gif w moim przypadku jest to po prostu licznik pobrań
l0ud
można tak: (piszę od ręki i może nie działać - ale masz istotę)

  1. <?php
  2. $plik = file('dzialy.dat');
  3. $linia = 0;
  4. $szukana = 'asd';
  5.  
  6. for ($i=0,$b=count($plik); $i<$b; $i++) {
  7.   $poz = explode('||',$plik[$i]);
  8.   if ($poz[1] == $szukana) {
  9.      $linia = $i+1;
  10.      break;
  11.   }
  12. }
  13.  
  14. echo 'Linia to '.$linia;
  15. ?>


Jeżeli linia == 0 to znaczy że pozycja nie istnieje. Zastanawiam się tylko, do czego Ci taka funkcja...
axwell
Numer linni potrzebny mi był po to, aby właśnie z linijki o tym numerze pobrać zmienne. Właśnie... tyle że jak mam już numer linni to jak umieścić te dane w tablicy? każda zmienna w pliku oddzielona jest ||

A to właśnie obrazuje po co mi jest ten skrypt... robię download na swojej stronie, nie chce używać bazy dlatego zaplanowałem, że po wybraniu odpowiedniej linijki skrypt załaduje dane coś w stylu jak na schemacie:
zegarek84
Cytat(axwell @ 29.10.2008, 23:38:10 ) *
... tyle że jak mam już numer linni to jak umieścić te dane w tablicy? każda zmienna w pliku oddzielona jest ||

  1. <?php
  2. $linia = 22;
  3. $uchwyt = fopen ("/tmp/inputfile.txt", "r");
  4.  
  5. if ($uchwyt) { $i=1;
  6.    while (!feof($uchwyt)) {
  7.        if($i==$linia){list($pobrano,$plik,$koment,$gat) = explode('||',fgets($uchwyt)); break;}
  8.    fgets($uchwyt);
  9.    ++$i;}
  10. fclose ($uchwyt);}
  11. ?>

dla przykładu jest to 22 linia..
przy pomocy polecenia list($pobrano,$plik,$koment,$gat) tablicę będziesz miał od razu rozbita na poszczególne zmienne
po zatym polecam skorzystanie z mniejszej bazy danych SQLite ^-~
axwell
świetnie, o to mi chodziło, a gdybym chciał jednak umieścić te dane w tablicy?
golaod
  1. <?php
  2. $tablica = file_get_contents('plik.txt');
  3. $exploded_table = array();
  4. foreach($tablica as $key)
  5.  $exploded_table[] = explode('||',$key);
  6. // w ten sposób masz rozbite i w tablicy
  7. // w latwiejszy sposob jest chyba uzyc fgetcsv i fputcsv ale to juz tylko Twoja wola
  8. ?>
zegarek84
wystarczy przypisać linijkę jedną tak jak to zrobił l0ud - a dokładniej zamiast:
Kod
list($pobrano,$plik,$koment,$gat) = explode('||',fgets($uchwyt));

zapisać:
Kod
$jakas_tablica= explode('||',fgets($uchwyt));

do poszczególnych elementów tablicy będziesz się odwoływał poprzez $jakas_tablica[0]...$jakas_tablica[1].... itd....

możesz jeszcze gdzie indziej "porzucać" zmienne... w sumie wystarczyło przerobić to co zaproponował l0ud - tyle, że tamto jest dobre dla malych plików z funkcją file() - przy większych będzie to i wolno działało i może doiść do przepełnienia pamięci - moim zdaniem lepiej było użyć fgets() które przeszukuje plik wiersz po wierszu i także umożliwia podliczenie tych wierszy, lub skorzystać z młodszej funkcji fgetcsv() dzięki której ni e musielibysmy urzywać funkcji explode() ... funkcją list() któ rą ja użyłem po prostu przypisywało się elementy tablicy do zmiennych...

polecam przeglądanie funkcji i trochu poczytanie w manualu:
http://php.net.pl/manual/pl/index.php - cześciowo spolszczony, sporo też po angielsku - jeśli szukasz opisu konkretnej funkcji php to wpisz jej nazwę w polu szukania...

poza tym poważnie poczytaj o bazie SQLite - jest ona przechowywana w jednym pliku - najlepiej zainteresuj się od razu SQLite 3 i nie czytaj na temat funkcji bezpośrednich do tej bazy tylko poczytaj jeszcze o PDO które jest uniwersalne do wielu baz i to na przyszłość by Ci się bardzo przydało... do bazy SQLite możesz się odwoływać bezpośrednio zapytaniami SQL, sortować wyniki i inne - podczas gdy operując na płaskich bazach danych opartych o notatnik wszystko musisz jakby przeżąglować przez php...
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.