Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pocięcie pliku na kilka mniejszych
kłulik
post
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ć?
Go to the top of the page
+Quote Post
hwao
post
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 winksmiley.jpg
Go to the top of the page
+Quote Post
kłulik
post
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?
Go to the top of the page
+Quote Post
dr_bonzo
post
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.
Go to the top of the page
+Quote Post
kłulik
post
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.
Go to the top of the page
+Quote Post
dr_bonzo
post
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

  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

Ten post edytował dr_bonzo 17.05.2005, 21:56:02


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kłulik
post
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 ".
Go to the top of the page
+Quote Post
dr_bonzo
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:50