Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przeszukiwanie plików txt
Forum PHP.pl > Forum > Przedszkole
cestis
Powiedzmy, że mam sporo plików o nazwach kolejnych: plik=1.txt, plik=2.txt etc. W każdym z tych plików znajduje się wartość liczbowa:
zawartość plik=1.txt: 12345
zawartość plik=2.txt: 1
zawartość plik=3.txt: 435431

No i teraz chciałbym wszystkie pliki txt z danego katalogu przeszukać i wybrać ten, który posiada największą wartość. No i pytanie, jak to zrobić? Jakie funkcje są za to odpowiedzialne etc., proszę o nakierowanie.
markonix
Listowanie katalogu (pętlą while + opendir ).
Otwierasz z kolejna każdy plik i odczytuj zawartość (fopen, fread).

Na początku pętli zdefiniuj sobie $max = 0 i $highest
Gdy podczas wykonywania pętli trafisz na wartość większą od $max to przypisz ją do $max, a do drugiej nazwy nazwę pliku.

Trafi np.
na 1000, 200, 100, 500 to wyświetli nazwę pliku gdzie był tysiąc i przy okazji jego wartość.
Pilsener
Obsługa plików nie jest mocną stroną PHP, są do tego specjalne narzędzia. Jeśli jednak upierasz się przy PHP i pliki mają faktycznie zawartość tylko w postaci jednej liczby a nazwy kolejne, to rozsądne wydaje się nie listowanie, lecz zbudowanie pętli, która startuje od 1 do nieskończoności i wczytuje po kolei pliki do zmiennej funkcją file_get_contents, następnie należy tą zmienną porównać z poprzednią (którą definiujemy jako 0 a potem rośnie wraz z przeszukiwaniem plików) i jeśli jest większa, to ustawić nową a jeśli mniejsza, to zignorować, pętla zakończy działanie jeśli brakuje pliku o kolejnej nazwie.

Sugestie:
Idealna do wczytywania plików będzie pętla while: http://pl.php.net/manual/pl/control-structures.while.php, która "kręci się" dopóki nie zostanie przerwana tak: (polecam http://pl.php.net/manual/pl/control-structures.break.php) lub dopóki jakaś tam zmienna zwraca true.

Spróbuj napisać coś sam, masz przykłady w manualu smile.gif
sadistic_son
Moim zdaniem najlepiej będzie każdy plik wczytać jako oddzielny element tablicy. Nazwy plików jako indeksy i zawartość pliku jako wartości elemenu. Potem wystarczy tylko przeszukać tablicę w poszukiwaniu najwiekszego elementu i zwrócić jego kluc czyli nazwę pliku.
cestis
Po dodaniu drobnych modyfikacji znow cos nie dziala. Kombinuje jakis czas i nie moge do tego dojsc. Oto kod:

  1. $i = 1; //numer pliku id=xx.txt
  2. $max = 1; //zmienna z najwieksza liczba pkt(wartosci pliku)
  3. $h = opendir("./u/txt");
  4.  
  5. while(false !== ($f = readdir($h))) {
  6. $a = file_get_contents("./u/txt/id=$i.txt");
  7. if(file_exists("./u/txt/id=$i.txt")) $i++;
  8. if($a > $max) {
  9. $max = $a; //zapisanie $max jako wartosc pliku
  10. $best = $i; //zapisanie $best jako numer pliku
  11. }
  12. $i++;
  13. }


Wiec on wyswietla pierwsza liczbe z pierwszego katalogu (id=1.txt), ktora nie jest najwieksza. Gdzie indziej sprobowalem, to wyswietlalo z innego pliku wartosc jako najwieksza, ale dwa pliki dalej byla wieksza. Dodam tez, jesli by sie to przydalo, ze w liscie plikow sa luki (id=1.txt, id=2.txt, id=6.txt, id=8.txt) itd., oczywiscie nie zawsze wystepuja, to przyklad.
zend
Jeśli masz włączone exec i jesteś na linuxie to
  1. $content = exec('cat *.txt | sort | tail -n1'); echo exec("grep -l -r $content ./");
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.