Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]parsowanie pliku txt, Jak odczytać wybrany zakres linii z pliku txt ?
fiasko
post
Post #1





Grupa: Zarejestrowani
Postów: 243
Pomógł: 1
Dołączył: 1.06.2010

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


Mam plik baza.txt, który waży 45 MB i chcę z niego odczytać 100 linii zawrtości zaczynając odczyt od linii onumerze 10000.

Jakiej funkcji użyć do odczytu i jak czytać ?

Dodam tylko, że file() deklaruje mi tyle pamięci, że nie da się załadować tak dużego pliku do pamięci .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
fiasko
post
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 1
Dołączył: 1.06.2010

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


interesują mnie jeszcze większe bo będę dostawać pliki z 50 mln linii (IMG:style_emoticons/default/smile.gif) W każdej linii mam jeden obiekt poddany serializacji. Będę odczytywać w CRON po 10000 rekordów na minutę jeszcze inne ciężkie operacje dotyczące tych obiektów.

Na bazie nie będę z tym pracować bo musiałbym pracować na setkach tabel. Tu będzie tak, że przerobiony plik nie będzie mi już potrzebny.

ok

teraz jest idealnie (IMG:style_emoticons/default/smile.gif)
  1. <?php
  2. $file = new SplFileObject('baza.txt');
  3. $file->seek(1000000);
  4. $start = 10;
  5. $ile = $start + 100;
  6.  
  7. for($i=$start;$i<=$ile;$i++){
  8. echo $file->current().'<br>';
  9. $file->next();
  10. }
  11.  
  12.  
  13. ?>


Ten post edytował fiasko 2.11.2012, 23:03:18
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





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

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


Cytat(fiasko @ 2.11.2012, 22:54:30 ) *
interesują mnie jeszcze większe bo będę dostawać pliki z 50 mln linii (IMG:style_emoticons/default/smile.gif) W każdej linii mam jeden obiekt poddany serializacji. Będę odczytywać w CRON po 10000 rekordów na minutę jeszcze inne ciężkie operacje dotyczące tych obiektów.

Na bazie nie będę z tym pracować bo musiałbym pracować na setkach tabel. Tu będzie tak, że przerobiony plik nie będzie mi już potrzebny.

gdyby długość linii była stała można by to zrobić optymalniej, ale pomińmy tą kwestię (w końcu nie będziemy tu implementować bazy danych ;p)... wspomniałeś, że to co obrobione to nie potrzebne i będziesz miał to na zasadzie kolejki... więc by następnym razem nie przewijać pliku tak daleko przy nieregularnych liniach to nie mógłbyś tą techniką pociąć ten plik na wiele mniejszych po te 10000 linii kodu?? i w myśl zasady 100|1000 plików na katalog (nie pamiętam jaka liczba była optymalna) - więc musiałbyś sobie jakiś system nazewnictwa wystosować - obrobisz to to to usuwasz i tniesz następny plik... a przy kolejnej kolejce nie musisz tak daleko przewijać - to tylko propozycja...

//edit
czyli fseek przewijało za każdym razem od początku pliku - zaczynałem pisać w poprzednim poście, byś korzystał z fseek raz a potem z fgets (miks current i next ^^) ale zaraz to skasowałem bo zdawało mi się to niedorzeczne ;p - a już jakiś czas nie miałem potrzeby obróbki duuuużych plików ;p

Ten post edytował zegarek84 2.11.2012, 23:12:15
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 31.12.2025 - 03:54