![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam skrypt, którego zadaniem jest przerobienie pliku txt oraz podział danych w nim zawartych na dwie części - słowa z polskimi znakami, oraz resztę. Skrypt wygląda tak:
Skrypt działa, radzi sobie z małymi plikami, jednak problem jest z większymi. Korzystając z file_get_contents poradził sobie z plikiem ponad 1mb (2mb już nie chwycił). Gdy korzystałem wcześniej z fopen, fread itd, nawet 1mb był dla niego za duży. Początkowo wyskakiwała informacja, że czas wykonywania skryptu jest za długi, jednak po dodaniu linii
skrypt działa dłużej, ale ostatecznie wysypuje się po kilkunastu minutach przeglądarka. Najwyraźniej skrypt nie radzi sobie z pierwszą częścią - odczytem pliku i wystartowaniem z pętlą, gdyż do bazy nie są dodawane żadne rekordy. Zależy mi, aby skrypt radził sobie przynajmniej z plikami 5mb, a najlepiej by było, gdyby ugryzł taki, co waży 40mb. Fajnie by też było, gdyby nie trzeba było całkiem przerabiać skryptu, aby czytał częściami, czy coś w tym stylu. W razie czego mogę zmienić rozszerzenie/format pliku z txt na coś innego, mam dostęp do pliku php.ini na serwerze. Ten post edytował Cromwell 15.12.2009, 14:40:24 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 29 Dołączył: 18.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wczytuj plik partiami oraz po zakończeniu cyklu uzupełnij bd. W file_get_contents określ offset i vista wio.
Ten post edytował tvister 15.12.2009, 15:22:41 -------------------- Kto rano wstaje ten leje jak z cebra.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co doczytałem w manualu, w file_get_contents mogę ustawić offset od danego znaku do danego.
Niby to jest dobre, ale boję się, że u mnie nie zadziała. Dane w pliku txt są zapisane w ten sposób: Cytat pies kot abecadło jakiś ogórek szkoła delfin marker Mają różną długość, różne litery. Wspólny jest jedynie znak \n. Jednak nie wiem, jak podzielić to wczytywanie pliku, aby nie tyle wczytywał część powiedzmy do 500 znaków, a np. określoną ilość słów, czy nawet około 500 znaków, tylko niech fragment kończy się \n. Ma ktoś pomysł? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
http://www.forumweb.pl/viewtopic.php?t=39103
Poczytaj o porcjowaniu danych z pliku: - wczyta do "tabliczka" linie pliku od-do, na początek liczysz linie w pliku, potem ustalasz po ile linii ma być wczytanych za jednym razem - wszystko masz opisane w tutorialu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 1.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ok, wprowadziłem trochę zmian, jednak nie działa do końca..
Część w środku IF (wykonywanego jeśli kliknie się na button 'dodaj') wygląda tak:
Skrypt fajnie dzieli słowa, zapisuje do plików, jednak w pewnym momencie zaczyna się miotać. Natrafia na 22 słowa z polskimi znakami, w pliku inne.txt ich nie ma, jednak zamiast następnego słowa za tymi słowami z polskimi znakami, jest pierwsze słowo z pliku (mam nadzieję, że dość zrozumiale tłumaczę). Co z tym zrobić? Ten post edytował Cromwell 16.12.2009, 16:50:20 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Hej.
1. Po co za każdym razem w pętli otwierasz i zamykasz plik? Fopen powinny być przed pętlą while a fclose za, w pętli tylko fwrite. 2. Sprawdź na kilku pierwszych rekordach jak działa preg_match, może nie do końca tak, jak tego oczekujesz? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 14:54 |