Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyświetlanie feagmentu pliku
desavil
post
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


W jaki sposób mogę wyświetlić np. tylko 100 linii pliku?
Do wyświetlania używam kodu, który czyta mi plik od końca:
  1. $a = array_reverse(file($plik));
  2. foreach($a as $xxx)
  3. echo nl2br($xxx);

I chciałbym wyświetlić tylko 100 linii, a nie wszystkie jeżeli będzie więcej.
W jaki sposób można takie coś uzyskać?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeżeli możesz sobie pozwolić na wczytanie całego pliku do pamięci to wystarczy, że do obecnego kodu dodasz array_slice i po sprawie. Jeśli jednak plik jest duży, będziesz musiał odczytywać go po kawałku każdorazowo zliczając ilość wczytanych linii. Po osiągnięciu 100 przerywasz dalsze wczytywanie.

Ten post edytował Crozin 11.09.2011, 10:01:37
Go to the top of the page
+Quote Post
cycofiasz
post
Post #3





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


  1. <?php
  2. $myfile = 'plik.txt';
  3.  
  4. $ic = 0;
  5. $ic_max = 100;
  6.  
  7. $handle = fopen($myfile , "r");
  8.  
  9. while (!feof($handle) && ++$ic<=$ic_max)
  10. {
  11. $buffer = fgets($handle, 4096);
  12. echo $buffer."<br>";
  13. }
  14. fclose($handle);
  15. ?>
Go to the top of the page
+Quote Post
desavil
post
Post #4





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


A jak zrobić jeszcze z tym odwróceniem, żeby od końca czytało?

:]
Go to the top of the page
+Quote Post
cycofiasz
post
Post #5





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


No to możesz zrobić tak jak Crozin napisał

  1. $a = array_reverse(file($plik));
  2. $a = array_slice ( $a , 0 , 100);
  3. foreach($a as $xxx)
  4. echo nl2br($xxx);
Go to the top of the page
+Quote Post
desavil
post
Post #6





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Ale jeżeli plik ma ponad 1-2GB?
Go to the top of the page
+Quote Post
cycofiasz
post
Post #7





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


No to wtedy możesz spróbować zastosować taki kod:

  1. <?php
  2. $myfile = 'myfile.txt';
  3. $command = "tac $myfile > /tmp/myfilereversed.txt";
  4. passthru($command);
  5. $ic = 0;
  6. $ic_max = 100; // stops after this number of rows
  7. $handle = fopen("/tmp/myfilereversed.txt", "r");
  8. while (!feof($handle) && ++$ic<=$ic_max) {
  9. $buffer = fgets($handle, 4096);
  10. echo $buffer."<br>";
  11. }
  12. fclose($handle);
  13. ?>


W skrypcie użyto unixowego polecenia tac , może to nie wszędzie działać
Go to the top of the page
+Quote Post
desavil
post
Post #8





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Kurcze, wolałbym bez tmp :/
Go to the top of the page
+Quote Post
cycofiasz
post
Post #9





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


dlaczego?

Tu masz jeszcze kilka funkcji, różne dla różnego rozmiaru pliku txt
http://mydebian.blogdns.org/?p=197
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@cycofiasz: Tworzenie kopii pliku z poziomu konsoli jest nieco bezsensowne, szczególnie w przypadku gdy ma się do dyspozycji takie narzędzia jak tail, które robią dokładnie to czego oczekuje autor wątku.

Jeżeli rozwiązanie miałoby być zrobione niejako w czystym PHP wtedy trzeba będzie nieco zmodyfikować kod. Odczytywać zawartość po kawałku od tyłu (filesize, fopen, fread, fseek(!)), wyszukiwać w tych kawałkach nowych linii (strpos) uwzględniając fakt, że mogą one być zapisane na trzy różne sposoby (\r, \n, \r\n). I tak aż do momentu znalezienia setnej linii bądź cofnięcia się do samego początku pliku.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 21:56