Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pocięcie pliku na kilka mniejszych
Forum PHP.pl > Forum > PHP
kłulik
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ć?
hwao
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 winksmiley.jpg
kłulik
Cytat
prosta sprawa

Może dla ciebie, dla mnie nie.

Może znacie jakieś programy, które potną ten plik?
dr_bonzo
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).
kłulik
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.
dr_bonzo
W kuncu powiedziales po co ci to
http://dev.mysql.com/doc/mysql/en/load-data.html

  1. OAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
  2. [REPLACE | IGNORE]
  3.  
  4. INTO TABLE tbl_name
  5. [FIELDS
  6. [TERMINATED BY '\t']
  7. [[OPTIONALLY] ENCLOSED BY '']
  8. [ESCAPED BY '\\' ]
  9. ]
  10. [LINES
  11. [STARTING BY '']
  12. [TERMINATED BY '\n']
  13. ]
  14. [IGNORE number LINES]
  15. [(col_name,...)]
  16.  
  17. ----
  18. np.:
  19.  
  20. LOAD DATA INFILE 'gdziestam/data.csv'
  21. INTO TABLE DATA FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY ''' LINES STARTING BY '' TERMINATED BY '\n' ( date, number )


moze kilka minut ci to zajmie biggrin.gif
kłulik
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 ".
dr_bonzo
ENCLOSED BY '"'
// bez optionally
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.