Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Numer linni z pliku - jak pobrać?
axwell
post 29.10.2008, 21:06:53
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 1
Dołączył: 14.11.2007

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
wookieb
post 29.10.2008, 21:10:41
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tak. Potrzebne funkcje
http://php.net/file
http://php.net/strpos
przeszukujesz kazda linie i znajdujesz to co chcesz.


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 29.10.2008, 21:11:26
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie rozumiem czy ta liczba na początku wskazuje nr linii? bo jak tak to wystarczy to explodem rozwalić.


--------------------
Go to the top of the page
+Quote Post
axwell
post 29.10.2008, 21:12:59
Post #4





Grupa: Zarejestrowani
Postów: 143
Pomógł: 1
Dołączył: 14.11.2007

Ostrzeżenie: (10%)
X----


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ń
Go to the top of the page
+Quote Post
l0ud
post 29.10.2008, 21:31:12
Post #5





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


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...


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
axwell
post 29.10.2008, 23:38:10
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 1
Dołączył: 14.11.2007

Ostrzeżenie: (10%)
X----


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:

Ten post edytował axwell 29.10.2008, 23:51:10
Go to the top of the page
+Quote Post
zegarek84
post 30.10.2008, 03:35:26
Post #7





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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 ^-~

Ten post edytował zegarek84 30.10.2008, 03:44:54


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
axwell
post 30.10.2008, 08:05:18
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 1
Dołączył: 14.11.2007

Ostrzeżenie: (10%)
X----


świetnie, o to mi chodziło, a gdybym chciał jednak umieścić te dane w tablicy?
Go to the top of the page
+Quote Post
golaod
post 30.10.2008, 10:11:37
Post #9





Grupa: Zarejestrowani
Postów: 419
Pomógł: 42
Dołączył: 12.08.2008
Skąd: Wrocław

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


  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. ?>
Go to the top of the page
+Quote Post
zegarek84
post 30.10.2008, 10:22:20
Post #10





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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...

Ten post edytował zegarek84 30.10.2008, 10:35:48


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

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: 18.06.2025 - 17:07