![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 15.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam plik logu pewnej gry, przykładowa linijka wygląda tak: [30 Nov 11:53:09] PARTY [Caelldfssion] jakiś tam tekst no i mam takie pliki utworzone przez siebie: dictionary.txt (słownik) o przykładowej zawartości: .*kur.* (na razie jeden wyraz) oraz channels.txt (schematy kanałów do przeglądania) i przykładowej zawartości: ^\[.. ... ..:..:..\] PARTY \[.*\] ^\[.. ... ..:..:..\] ALL [\[.*\] ^\[.. ... ..:..:..\] ALLIANCE \[.*\] ^\[.. ... ..:..:..\] TRADE \[.*\] ^\[.. ... ..:..:..\] HERO_VOICE \[.*\] i teraz sedno problemu... stworzyłem skrypt, który niestety nie działa i bardzo obciąża sprzęt bo wyszukuje w 30MB pliku (około 400000 linijek) i dla każdej jest odpowiednia ilość kombinacji wyszukiwania, dla w/w plików jest to 5^1 kombinacji (5), skrypt wygląda tak jak kod poniżej, jeżeli ktoś ma pomysł jak to dobrze rozwiązać aby działało i nie obciążało aż tak sprzętu to prosiłbym o pomoc skrypt:
wcześniej wczytałem cały 30MB plik do tablicy funkcją file() i nie było to dobre rozwiązanie, także obciążało, stąd chciałem przesiąść się na to, ale jak widać nieskutecznie. W kodzie mogą być drobne błędy jednak całość powinna być w miarę dobrze zrozumiana. Z góry dziękuję za pomoc. Ten post edytował Qwer 26.12.2009, 19:49:09 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 15.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
feof()+fgets() użyłem teraz, wcześniej użyłem też file() czyli wczytania do tablicy całego pliku i wtedy porównywania jednak, oba rozwiązania są kiepskie ponieważ plik ma jakieś 400000 linijek co należy pomnożyć przez ilość kombinacji dla każdej (ilość kanałów razy ilość wyrazów). Strasznie obciąża kompa i na koniec się wysypuje. Chyba że użyłeś czegoś co zapobiegnie takiemu obciążeniu, jeżeli tak i możesz to proszę opisz mniej więcej jak chciałeś to zrobić, z góry dzięki.
To co ma być znalezione także jest wrzucone do tablicy, robi to pierwsza pętla, łączy plik kanałów z plikiem słownika. przykładowe wyrażenie do znalezienia po połączeniu tylko jednego kanału z tylko jednym wyrazem: ^\[.. ... ..:..:..\] PARTY \[.*\] .*kur.* Ten post edytował Qwer 27.12.2009, 10:39:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 23:42 |