2008-10-01 122 views
5

我需要将大文本(24MB)文本文件导入到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会使它变得更糟,因为它们会和记录分隔符一样! – 2008-10-01 09:52:17

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将导入一个以空格分隔的文件(从导入菜单中选中“将后续分隔符视为一个对象”框)。

然后你可以将文件只需保存为从Excel和CSV导入使用到MySQL:

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
相关问题