Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Funkcja, która zlicza wszystkie wiersze w pliku, Jak zliczyć wiersze w pliku i wypisać ich ilość funkcją w php?
AmyLokmart
post 6.12.2021, 14:22:45
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 28.11.2021

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


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ć?
Go to the top of the page
+Quote Post
aras785
post 6.12.2021, 14:33:01
Post #2





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


Tak, pobierasz listę wierszy (file), a następnie po prostu sprawdzasz wielkość tablicy (https://www.php.net/manual/en/function.count.php).
Go to the top of the page
+Quote Post
Pyton_000
post 6.12.2021, 16:47:00
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Tu masz wiele ciekawych pomysłów: https://stackoverflow.com/questions/2162497...text-file-200mb
Go to the top of the page
+Quote Post
AmyLokmart
post 9.12.2021, 20:25:06
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 28.11.2021

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


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 😊

Ten post edytował AmyLokmart 9.12.2021, 20:26:38
Go to the top of the page
+Quote Post
Tomplus
post 9.12.2021, 20:50:28
Post #5





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


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.
Go to the top of the page
+Quote Post
Pyton_000
post 10.12.2021, 11:45:53
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czyli jedeno z najgorszych rozwiązań.
Go to the top of the page
+Quote Post
AmyLokmart
post 13.12.2021, 00:50:36
Post #7





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 28.11.2021

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


"Pyton_000" co Masz na myśli pisząc: "Czyli jedeno z najgorszych rozwiązań. "?
Go to the top of the page
+Quote Post
aras785
post 13.12.2021, 01:33:39
Post #8





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


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


Ten post edytował aras785 13.12.2021, 01:42:13
Go to the top of the page
+Quote Post
Pyton_000
post 13.12.2021, 12:29:15
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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

Ten post edytował Pyton_000 13.12.2021, 12:29:59
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: 17.04.2024 - 00:16