2008-10-01 2 views
5

Мне нужно импортировать довольно большие (24 МБ) текстовые файлы в таблицу MySQL. Каждая строка выглядит следующим образом:Как импортировать текстовый файл с разделителями пробелов в MySQL?

1 1 0.008 0 0 0 0 0          

Есть один или несколько пробелов после каждого поля, а последнее поле хвостатого около 36 пробелов до символа новой строки.

Как импортировать такой файл в MySQL? Из документации кажется, что LOAD DATA ожидает, что все поля будут завершены точно такой же строкой. Я пробовал

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' '; 

, но MySQL будет интерпретировать последовательность из более чем одного пространства как разделитель пустого поля.

Любые идеи?

ответ

9

Если вы используете unix/linux, вы можете передать его через sed.

открыть терминал и тип:

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

это заменяет все последовательности нескольких пространств с одним пробелом.

0

Вы также можете использовать эту команду, отправленную Jauco, чтобы изменить разделитель на ';' или \ n. Это тоже поможет.

+0

Не совсем; MySQL вполне доволен пробелами как полевыми разделителями, здесь только несколько проблем. И использование LF будет ухудшать качество, поскольку они будут такими же, как и разделители записей! –

0

Не можете ли вы сделать это прагматично? Простой PHP скрипт сможет загрузить файл в, разделить пробелами, и делать вставки в мгновение ока:

<?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); 
} 

?> 

Редактировать Это, как говорится, Jakal's предложение гораздо аккуратнее;)

2

Если вы работаете в Windows, просто используйте Excel.

Excel импортирует файл с разделителями пробелов (установите флажок «обработать последующие разделители как один» в меню импорта).

Тогда вы можете просто сохранить файл в формате CSV из Excel и импортировать в MySQL с помощью:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
Смежные вопросы