5

我需要将较大的 (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

4 回答 4

9

如果您使用的是 unix/linux,那么您可以通过 sed 进行操作。

打开终端并输入:

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

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

于 2008-10-01T07:19:51.923 回答
2

如果您在 Windows 上,只需使用 Excel。

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

然后,您可以简单地将文件从 Excel 保存为 CSV 并使用以下命令导入 MySQL:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
于 2011-03-28T17:44:36.000 回答
0

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

于 2008-10-01T07:26:42.097 回答
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 的建议要简洁得多;)

于 2008-10-01T07:31:18.950 回答