【问题标题】:How do I import a whitespace-delimited text file into MySQL?如何将空格分隔的文本文件导入 MySQL?
【发布时间】:2010-09-14 11:12:01
【问题描述】:

我需要将较大的 (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 会将多个空格的序列解释为分隔一个空字段。

有什么想法吗?

【问题讨论】:

    标签: mysql load-data-infile mysqlimport


    【解决方案1】:

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

    打开终端并输入:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 不是真的; MySQL 对空格作为字段分隔符非常满意,这里只有多个空格才是问题所在。使用 LF 会使情况变得更糟,因为它们会与记录分隔符相同!
        【解决方案4】:

        有没有办法务实地做到这一点?一个简单的 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 的建议要简洁得多;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-05
          • 2021-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-23
          • 1970-01-01
          相关资源
          最近更新 更多