![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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 -------------------- |
|
|
![]()
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 ![]() |
|
|
![]()
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! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
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:
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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 580 Pomógł: 85 Dołączył: 25.03.2010 Skąd: Skrzyszów :) Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:03 |