Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Przeszukiwanie plików txt
cestis
post 6.12.2010, 19:24:10
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
markonix
post 6.12.2010, 20:38:09
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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ść.

Ten post edytował markonix 6.12.2010, 20:39:36


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 6.12.2010, 23:03:38
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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
Go to the top of the page
+Quote Post
sadistic_son
post 6.12.2010, 23:48:54
Post #4





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


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.


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
cestis
post 8.12.2010, 15:35:41
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 26.03.2010

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


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.
Go to the top of the page
+Quote Post
zend
post 9.12.2010, 19:57:36
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


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 ./");
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: 14.08.2025 - 09:03