使用 PHP 和 MySQL 处理 txt 文件中的非逗号分隔数据


Handling non-comma-delimited data in a txt file with PHP and MySQL

我有大量数据需要导入MySQL数据库。我习惯于导入逗号和制表符分隔的数据,但这是不同的,我将尝试在下面用最简单的术语解释格式。

所以它可能是:

XXX XXX XXX

或者可能是:

XXX X XXX

或者可能是:

X
X XX

我希望空间显示正确!如果是这样,您将看到每个字符都有其分配的空间,而不是由空格、制表符或逗号分隔的 3 个部分。(它们在技术上由空格分隔,但由不同的数字分隔(。

我需要做的是说字符 1、2 和 3 进入数据库中的field_1。字符 4 始终为空白,字符 5、6 和 7 进入field_2,依此类推。基本上每个部分都必须在自己的字段中。

现在,我想我可以将其作为一个字段导入到一个临时表中,也许可以使用 SUBSTR(( 将这些数据排列成正确的格式,如上所述。

但这似乎有点冗长。

有没有更好的方法可以做到这一点?我希望能从文本文件直接将其导入到数据库中的正确格式,而无需执行任何其他步骤。

谢谢

我尝试了 PHP substr(( 路由,虽然它有效,但我发现处理每行循环的数据需要很长时间,并且考虑到我有数十万条记录要处理,感觉它太慢了。

作为替代方案,我找到了这个简单的SQL解决方案,它可以非常快速地处理数据:

LOAD DATA LOCAL 
    INFILE 'fixed-width-data.txt' 
INTO TABLE 
    my_table (@line)
SET 
    field_1 = SUBSTR(@line,1,3),
    field_2 = SUBSTR(@line, 5,3),
    field_3 = SUBSTR(@line, 9,3)    
substr()是一个

选项,但正则表达式可能更优雅。对于字符 1 到 3 是一个字段,5 到 7 是另一个字段的示例,您可以执行...

preg_match('/^(.{3}).(.{3})$/', $line_of_data, $matches);
$field_one = $matches[1];
$field_two = $matches[2];

这显然是一个简化的例子,但我认为,如果你有很多数据"字段"可以使用,你会发现使用正则表达式而不是substr()从长远来看会更令人愉快。