Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja, która zlicza wszystkie wiersze w pliku
Forum PHP.pl > Forum > Przedszkole
AmyLokmart
Witam smile.gif Chciałabym dowiedzieć się jak to zrobić, aby zliczyć wszystkie wiersze w pliku .txt i pokazać ilość tych wierszy? Załóżmy, że w pliku jest lista, która zawiera 12.000 wierszy. Chciałabym, aby funkcja w php zliczała ilość tych wierszy z pliku .txt i wypisała ich ilość.
Czy ktoś wie jak to zrobić?
aras785
Tak, pobierasz listę wierszy (file), a następnie po prostu sprawdzasz wielkość tablicy (https://www.php.net/manual/en/function.count.php).
Pyton_000
Tu masz wiele ciekawych pomysłów: https://stackoverflow.com/questions/2162497...text-file-200mb
AmyLokmart
Witajcie 😊

Trochę mnie nie było, bo oprócz tego, że interesuje się bardzo PHP to mam jeszcze życie prywatne 😊

Wracając do tematu, pisałam wcześniej tak: "Chciałabym dowiedzieć się jak to zrobić, aby zliczyć wszystkie wiersze w pliku .txt i pokazać ilość tych wierszy? Załóżmy, że w pliku jest lista, która zawiera 12.000 wierszy. Chciałabym, aby funkcja w php zliczała ilość tych wierszy z pliku .txt i wypisała ich ilość.
Czy ktoś wie jak to zrobić?"

Jeśli ktoś przeczytał ze zrozumieniem moją wypowiedź to zauważył, że chodzi mi, o funkcję (Zresztą w temacie napisałam konkretnie: "Funkcja, która zlicza wszystkie wiersze w pliku")

Panowie "Pyton_000" i "Aras785" Dziękuję Wam za linki, ale nie przydały mi się. Stronę: stackoverflow.com omijam, ponieważ nie jest dobrym źródłem z uwagi na podsyłane błędne skrypty i przekopiowane w większości z różnych stron. Podają rozwiązania Grubo ciosane, a mi to nie odpowiada. Wolę zajrzeć do dokumentacji.

Strona: https://www.php.net/manual/en/function.count.php jest dobrym źródłem, ale chyba nie do tego co ja chcę. Działania na tablicy odpadają (w moim zbiorze plików, którymi operuje nie ma dużych zasobów. A plików mam zaledwie ze dwadzieścia i wszystkie do testów przed rozpoczęciem pisania aplikacji)

Pozwólcie, że sama odpowiem sobie na pytanie zadane w temacie, bo znalazłam odpowiedź smile.gif



Już ją użyłam i działa 😊
Tomplus
stackoverflow.com to nie jest strona z której bezwiednie należy kopiować kod. Tam zadają pytania ludzie którzy też mają różne problemy, a odpowiedzi dotyczą ich przypadków.
Pyton_000
Czyli jedeno z najgorszych rozwiązań.
AmyLokmart
"Pyton_000" co Masz na myśli pisząc: "Czyli jedeno z najgorszych rozwiązań. "?
aras785
Cytat
Trochę mnie nie było, bo oprócz tego, że interesuje się bardzo PHP to mam jeszcze życie prywatne 😊

nie wiem po co wgl. taka wstawka - każdy z nas ma życie prywatne i za pomaganie na forum nikt nam nie płaci biggrin.gif Z resztą to Ty zadałaś pytanie

  1. Wracając do tematu, pisałam wcześniej tak: "Chciałabym dowiedzieć się jak to zrobić, aby zliczyć wszystkie wiersze w pliku .txt i pokazać ilość tych wierszy? Załóżmy, że w pliku jest lista, która zawiera 12.000 wierszy. Chciałabym, aby funkcja w php zliczała ilość tych wierszy z pliku .txt i wypisała ich ilość.
  2. Czy ktoś wie jak to zrobić?"
- dajemy Ci propozycje, a zrobienie funkcji powinno należeć do Ciebie.. funkcja jest tylko wrapperem..

Cytat
Jeśli ktoś przeczytał ze zrozumieniem moją wypowiedź to zauważył, że chodzi mi, o funkcję (Zresztą w temacie napisałam konkretnie: "Funkcja, która zlicza wszystkie wiersze w pliku")
- tak dostałaś funkcję file oraz count..

Cytat
Panowie "Pyton_000" i "Aras785" Dziękuję Wam za linki, ale nie przydały mi się. Stronę: stackoverflow.com omijam, ponieważ nie jest dobrym źródłem z uwagi na podsyłane błędne skrypty i przekopiowane w większości z różnych stron. Podają rozwiązania Grubo ciosane, a mi to nie odpowiada. Wolę zajrzeć do dokumentacji.
- stackoverflow jest jednym z najlepszych źródeł, dokumentacja jest ok ale jeśli robimy banalne rzeczy. Z czasem sama się o tym przekonasz.

Strona: https://www.php.net/manual/en/function.count.php jest dobrym źródłem, ale chyba nie do tego co ja chcę. Działania na tablicy odpadają (w moim zbiorze plików, którymi operuje nie ma dużych zasobów. A plików mam zaledwie ze dwadzieścia i wszystkie do testów przed rozpoczęciem pisania aplikacji)

Cytat
Pozwólcie, że sama odpowiem sobie na pytanie zadane w temacie, bo znalazłam odpowiedź smile.gif
- siedzę w phpie ponad 10 lat i w życiu nie widziałem tej funkcji ale jeśli spełnia Twoje oczekiwania to dobrze.

Moje rozwiązanie
  1. function countLinesFromFile(string $pathToFile): int {
  2. $file = new \SplFileObject($pathToFile, 'r');
  3. $file->seek(PHP_INT_MAX);
  4.  
  5. return $file->key();
  6. }
Pyton_000
Cytat(AmyLokmart @ 13.12.2021, 00:50:36 ) *
"Pyton_000" co Masz na myśli pisząc: "Czyli jedeno z najgorszych rozwiązań. "?


To że ładujesz cały plik do pamięci a potem jeszcze musisz wykonać dość kosztowną operacje znalezienia zapewne znaków nowej linii.
Zrobiłem dla Ciebie pewien eksperyment.

Kod:
Kod
<?php

echo memory_get_usage()/1024 . "\n";
$start = microtime(true);
$file = file_get_contents('/app/file.dat');
$out = substr_count($file, "\n");
var_dump($out, microtime(true)-$start);
echo memory_get_usage()/1024 . "\n";
unset($file);
echo memory_get_usage()/1024 . "\n";

echo '====';
$start = microtime(true);
$file = new \SplFileObject('/app/file.dat', 'r');
$file->seek(PHP_INT_MAX);

var_dump($file->key(), microtime(true)-$start);
echo memory_get_usage()/1024 . "\n";


Wyniki:
Kod
381.703125
int(4192957)
float(0.8671538829803467)
1048961.875

====
381.8515625
int(4192957)
float(0.6773262023925781)
398.40625


Dodam tylko że przykładowy testowany plik waży 1GB
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.