1

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

所以它可能是:

XXXXXXXXX

或者它可能是:

XXX X XXX

或者它可能是:

XX XX

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

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

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

但这似乎有点啰嗦。

有一个更好的方法吗?我希望将其从文本文件直接导入数据库中的正确格式,而无需采取任何其他步骤。

谢谢

4

2 回答 2

0

我尝试了 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)    
于 2012-05-25T12:05:48.543 回答
-1

substr()是一种选择,但使用正则表达式可能更优雅。对于您的示例,其中字符 1 到 3 是一个字段,而 5 到 7 是另一个字段,您可以这样做……</p>

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

这显然是一个简化的示例,但我认为,如果您有许多数据“字段”可供使用,您会发现substr()从长远来看,使用正则表达式而不是一遍又一遍地使用会更愉快。

于 2012-05-22T13:20:05.817 回答