Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wewnętrzny wskaźnik pliku na określonym wersie
Forum PHP.pl > Forum > PHP
ciszex
witam:)

kurcze nie umiem znaleść, a także napisac tongue.gif skrypcik, ktory przesunalby wew. wsakznik pliku na okreslona linie (wers). BAAAARDZO prosze o pomoc biggrin.gif
em1X
konkretnie co chcesz zrobic.. odczytywac i-ty wiersz pliku ?
ciszex
tz. plik ma np. 20 wersow

zamiar jest nastepujacy:
- ustawic sei na 5 wersie
-odczytac dane tylko na tym wersie
-przeslac je do formularza
-zamknac plik

dane z formularza zapisac na 5 wersie
Lee
jeżeli 4 wers wygląda następująco
$nazwa_zmiennej = "tekst";

to wystarczy wpisać w formularzu np value="'.$nazwa_zmiennej.'"

jeżeli nie wygląda jak wyżej to nie wiem zabardzo winksmiley.jpg
ciszex
heh jeszcze raz tongue.gif
mam plik "sklad.txt" rolleyes.gif
----------sklad.txt-----------
ciszex||Lider||9448421||17||4. Steyr AUG||ciszex.jpg
ciszex||Kapral||9448421||17||6. Ruger-77||
ktos1||zolniexl||9448421||17||6. Ruger-77||
ktos2||Kapral||92312323||12||1232123237||blbelbel
ktos3||Kapral||9448421||17||6. Rwerwerr-77||
ktos4||Kapral||9448421||17||wer.wrwer-77||bleblel
------end-----------------------

chce sie ustawic na 4 lini tj.
"ktos2||Kapral||92312323||12||1232123237||blbelbel"

odczytac te dane
wpisac je w value do input formularza( azeby bylo wiadomo co sie edytuje)

i zapiasc to co jest w formularzu na 4 wersie

biggrin.gif biggrin.gif biggrin.gif biggrin.gif
em1X
  1. <?php
  2. $fp = fopen("plik.txt", "r") or die("error");
  3. $i=0;
  4.  
  5. // ktory wers odczytac
  6. $ktory = 5;
  7.  
  8. while (!feof($fp)) {
  9. $line =& fgets($fp, 1024);
  10. if ($i++ == $ktory-1) {
  11. echo $line;
  12. break;
  13. }
  14. }
  15.  
  16. fclose($fp);
  17. ?>


albo:

  1. <?php
  2. // ktory wers
  3. $ktory = 5;
  4.  
  5. $tab =& file("plik.txt");
  6. echo $tab[$ktory-1];
  7. ?>


druga wersja nie polecana dla dużych plików
dem
w drugim przykladzie jest tablica z wszystkimi liniami pliku, a w 1 jak rozumiem pamięć jest rezerewowana tylko dla wybranej lini, tak?
em1X
w 1 przykladzie czyta linie po linii i wyswietla tylko ta, ktora chcesz wyswietlic.
dem
Cytat(em1X @ 17.06.2006, 11:28 ) *
w 1 przykladzie czyta linie po linii i wyswietla tylko ta, ktora chcesz wyswietlic.


tak, tyle to sam zrozumialem..ale chodzi mi czy samo czytanie lini bardzo zapycha pamiec(w moim przypadku ladowalbym tylko wybrana linia do zmiennej)? bo w drugim przykladzie ktorego sam uzywam do masowego wyswietlania danych, caly plik jest w jednej tablicy[co jest raczej malo ekonomiczne gdy chce tylko 1 linia miec]...

wiem ze topornie tlumaczo moje watpliwosci, sorx ;-)
anyway, jak mozesz to poprostu wejdz na 2minuty na gg :}
em1X
To mozesz kazac php czytac tylko jeden bajt danych, natomiast calosc tylko w okreslonej linijce...
dem
hmm..śmieszna sprawa... powiedz mi, dla ilu lini 2 twoj przyklad jest wolniejszy?

Przeprowadzilem test dla pliku zawierajacego 1000 lini.
Kazda linia zawierala ciag a||a||a||a, a ostatnia 1||a||a||a.
Powiem szczerze, że wyniki mnie zaskoczylo, bo wynik:
a) dla Twojego 1 sposobu: 0.005s
b) dla Twojego 2 sposobu: 0.002s //winner

jako, że stwierdziłem, że 1000 lini to zamalo, to dalem 100 000 lini
a) 1 sposob: 0.562s //winer
b) 2 sposob: error, brak pamieci

No dobra.. moj cms, który bedzie wykorzystywał wyciaganie lini może nie bedzie mial 100 000 lini wiec test dla 10 000:

a) 1 sposób: 0.046s
b) 2 sposób: 0.019-0.017s //winer

na 3 próby zwyciężył Twój 2 sposób... moje pytanie teraz brzmi, dla jakiej wielkości(ilości lini) pliku powiedziałeś:
Cytat
druga wersja nie polecana dla dużych plików


Nie to, że sie czepiam czy coś... pytam z ciekawości ;]
em1X
Niepolecane dla takich plikow, w ktorych wielkosc tablicy przekroczylaby dopuszczalna ilosc MB pamięci, jaka php moze skonsumowac.
php programmer
  1. <?php
  2. $plik = file('nazwa_pliku.txt');
  3. $wiersz = explode('||',$plik[$numer_wiersza]);
  4. print_r($wiersz);
  5. ?>
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.