Как импортировать текстовый файл с пробелами в MySQL? - PullRequest
5 голосов
/ 01 октября 2008

Мне нужно импортировать большие (24 МБ) текстовые файлы в таблицу 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 будет интерпретировать последовательность из более чем одного пробела как разделитель пустого поля.

Есть идеи?

Ответы [ 4 ]

9 голосов
/ 01 октября 2008

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

откройте терминал и наберите:

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

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

2 голосов
/ 28 марта 2011

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

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

Затем вы можете просто сохранить файл в формате CSV из Excel и импортировать в MySQL, используя:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
0 голосов
/ 01 октября 2008

Нет ли способа сделать это прагматично? Простой скрипт 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);
}

?>

Редактировать При этом, предложение Джакала гораздо точнее;)

0 голосов
/ 01 октября 2008

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

...