2008-10-01 9 views
5

Potrzebuję sprowadzić duże pliki tekstowe (24 MB) do tabeli MySQL. Każda linia wygląda następująco:Jak importować plik tekstowy rozdzielany białymi znakami do MySQL?

1 1 0.008 0 0 0 0 0          

Istnieje jeden lub więcej spacji po każdym polu, a ostatnie pole jest rozkładem przez około 36 miejsc przed linią.

Jak zaimportować taki plik do MySQL? Z dokumentacji wydaje się, że LOAD DATA oczekuje, że wszystkie pola zostaną zakończone dokładnie tym samym ciągiem znaków. Próbowałem już teraz, ale MySQL interpretuje sekwencję więcej niż jednego spacji jako ograniczającą puste pole.

Wszelkie pomysły?

Odpowiedz

9

Jeśli używasz systemu Unix/Linux, możesz umieścić go w wersji sed.

otworzyć terminal i wpisz:

sed 's/ \+/ /g' thefile > thefile.new 

ten zastępuje wszystkie sekwencje wielu miejscach z jednej przestrzeni.

0

Możesz także użyć tego samego polecenia wysłanego przez Jauco, aby zmienić ogranicznik na ";" lub \ n. Pomoże to również.

+0

Niezupełnie; MySQL jest całkiem zadowolony z spacji jako ograniczników pól, to tylko wiele z nich stanowi problem. Używanie LF pogorszyłoby sytuację, ponieważ byłyby takie same jak ograniczniki rekordów! –

0

Czy nie można tego zrobić w sposób pragmatyczny? Prosty skrypt PHP będzie mógł załadować plik, Split spacjami i zrobić wkładkę w ogóle czasu:

<?php 

$db = mysql_connect('host', 'user', 'password') 
or die('Failed to connect'); 
mysql_select_db('database', $db); 

$fileHandle= @fopen("import.file", "r"); 
if ($fileHandle) { 
    while (!feof($fileHandle)) { 
     $rawLine = fgets($fileHandle, 4096); 

     $columns = preg_split("/\s+/", $rawLine); 

     //Construct and run an INSERT statement here ... 

    } 
    fclose($fileHandle); 
} 

?> 

Edit Mając na uwadze powyższe, Jakal's sugestia jest daleko neater;)

2

Jeśli używasz systemu Windows, po prostu użyj programu Excel.

Program Excel zaimportuje plik z odstępami białymi (zaznacz pole "Traktuj kolejne ograniczniki jako jeden" z menu importu).

Następnie można po prostu zapisać jako plik CSV z programu Excel, a następnie zaimportować do MySQL za pomocą:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
Powiązane problemy