如何将以空格分隔的文本文件导入MySQL?

时间:2008-10-01 07:13:13

标签: mysql load-data-infile mysqlimport

我需要将大量(24MB)文本文件导入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 个答案:

答案 0 :(得分:9)

如果你在unix / linux上,那么你可以通过sed。

打开终端并输入:

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

这将用一个空格替换多个空格的所有序列。

答案 1 :(得分:2)

如果您使用的是Windows,请使用Excel。

Excel将导入以空格分隔的文件(请从导入菜单中选中“将后续分隔符视为一个”框。)

然后,您只需将文件从Excel保存为CSV,然后使用以下命令导入MySQL:

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

答案 2 :(得分:0)

您还可以使用Jauco发布的相同命令将分隔符更改为“;”或\ n。 那也有帮助。

答案 3 :(得分: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建议更为简洁;)