![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Copa Cabana Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Muszę pociąć plik 70MB na części około 5MB, ale tak żeby poszczególne linie nie były pocięte, tzn. żeby nie było tak, że kawałek wiersza jest w jednym pliku, a reszta w drugim. Próbowałem w php za pomocą fopen i explode ale trwało to strasznie wolno. Natomiast Total Commander przecinał mi wiersz w połowie. Jakieś pomysły lub programy jak to zrobić? |
|
|
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Recznie na oko.
w php sie nie oplaca poniewaz za duzo danych bys chcial wladowac 70mb, mozliwe to jest ini_set" title="Zobacz w manualu PHP" target="_manual(), ale lepiej to napisac np w c++ prosta sprawa ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Copa Cabana Ostrzeżenie: (0%) ![]() ![]() |
Cytat prosta sprawa Może dla ciebie, dla mnie nie. Może znacie jakieś programy, które potną ten plik? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Ale nie trzeba trzymac calych danych w pamieci:
1. musisz miec zagwarantowane ze kazda linia bedzie < 5MB $data_count = 0; // zlicza ilosc zapisanych danych do pojedynczego pliku 2. odczytujesz linie 3. jesli jej dlugosc + $data_count < 5MB to ja dopisujesz do $pliku i zapisujesz do $pliku; $data_count += dlugosc tej linii jesli nie zamykasz ten $plik a linie wpisujesz do nowego $pliku., $data_count = dlugosc tej linii 4. itd. az skonczy sie plik zrodlowy W pamieci trzymasz max 1 linie (choc oczywiscie moze ona byc dowolnie dluga). -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Copa Cabana Ostrzeżenie: (0%) ![]() ![]() |
Jedna linia pliku to max. 100 znaków. Ale tych linii jest kilka milionów. Plik waży 70 MB.
W tym pliku mam bazę w formacie CSV. Próbowałem sposobu podobnego do opisanego przez @dr_bonzo tylko nie zapisywałem do kolejnego pliku, tylko explode wiersza i INPUT do MySQLa, ale po 20 min w bazie miałem 50 wierszy. Szukam programu, który potnie plik na mniejsze, żeby można go było łatwo wsadzić później do bazy. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
W kuncu powiedziales po co ci to
http://dev.mysql.com/doc/mysql/en/load-data.html
moze kilka minut ci to zajmie ![]() Ten post edytował dr_bonzo 17.05.2005, 21:56:02 -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Copa Cabana Ostrzeżenie: (0%) ![]() ![]() |
Dzięki. O to mi chodziło.
Ale mam jeszcze jeden problem. Każdą wartość mam otoczoną przez " (cudzysłów). Co trzeba zrobić żeby go ominąć bo teraz wstawia do bazy wartości razem z ". |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
ENCLOSED BY '"'
// bez optionally -------------------- Nie lubię jednorożców.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 04:50 |