【问题标题】:Handling non-comma-delimited data in a txt file with PHP and MySQL使用 PHP 和 MySQL 处理 txt 文件中的非逗号分隔数据
【发布时间】:2012-05-22 13:06:41
【问题描述】:

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

可能是这样的:

XXXXXXXXX

也可以是:

XXX X XXX

也可以是:

X X XX

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

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

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

但这似乎有点啰嗦。

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

谢谢

【问题讨论】:

  • 您可以使用 substr,但我不会在纯 sql 中这样做。只需阅读每一行,使用php.net/manual/en/function.substr.php 获取您的 3 个变量,然后插入。
  • 这被称为“固定宽度数据”,顺便说一句,很常见。例如,请参见此处:stackoverflow.com/questions/3876092/…
  • 感谢 Mellamokb,这很有帮助!我在这里发布这个问题的原因之一是因为我不知道它叫什么,因此真的很难寻找关于这个主题的任何有用的东西。我以前从未遇到过。
  • Nanne,这是我最初的想法之一,但我认为这真的很耗资源并且可能需要更长时间?
  • 与 mysql 中的加载文件相比,当然,但如果您仍然在 PHP 中读取文件(我的意思是,您已经标记了问题 php)我没有看到问题。您可以随时尝试(这没什么大不了的,您需要 3 个substr,所以工作量不大),看看它有多快 :)

标签: php mysql text


【解决方案1】:

我尝试了 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)    

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢阁楼。我一直想更频繁地使用正则表达式,我认为你是对的。不知道为什么您的答案被否决 - 评论会很有用,但我怀疑这是无意的?
    • 谁知道呢。但是,您可以通过投票支持或什至接受它来为这个恶棍伸张正义。 =P
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2012-03-19
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多