【问题标题】:Importing fixed-width text files to Mysql with PHP使用 PHP 将固定宽度的文本文件导入 Mysql
【发布时间】:2010-10-06 19:16:40
【问题描述】:

我正在尝试将带有文本文件的固定导入到 Mysql 表中。我正在四处寻找答案,但我的主要问题是我无法弄清楚我应该如何做到这一点的逻辑。也许有人可以提供一些关于过程的提示:

步骤
1.fopen文件

$file_handle = fopen("thefile.txt", "r");  

2。使用feof 转到文件末尾。分开每一行。 (我知道为什么,但是 $output 行有效。

 while (!feof($file_handle) ) {  
 $line_of_text = fgets($file_handle);  
 $lines = explode('|', $line_of_text);  
 $output = $lines[0] . $lines[1]. "<BR>";

所有这些都可以正常工作。它读取固定宽度的文件,并按应有的方式逐行显示。但是在将其导入 Mysql 之前如何设置列?

我想也许做这样的事情可能有助于定义正确的列:

echo substr($output,0,5);
echo substr($output,5,10);
echo substr($output,16,5);

但这不起作用。基本上,有人可以概述我需要经历的步骤吗?我不是在寻求解决方案,但目前,当我不知道下一步应该采取什么步骤时,我什至不知道谷歌要做什么。

很抱歉这里有完整的初学者问题,但我们将非常感谢任何帮助。

谢谢

特里

[我也不是 100% 确定如何导入到 Mysql,但我想解决这个问题。 IE:如何设置子字符串来定义我的列]

【问题讨论】:

    标签: php mysql import


    【解决方案1】:

    使用fscanf 处理固定宽度文件(具有单独的数据部分)最好

    while($data=fscanf("%5s%10s%5s\n",$file_handle)){
        var_dump($data);
    }
    

    但是,explodeing on '|'让我觉得fgetcsv 也可以工作,如果这样工作,MySQL 中的LOAD DATA 命令可能会完全跳过 PHP。

    【讨论】:

    • fgetcsv 用于固定宽度?我只用了'|'因为我在教程中找到了它 - 任何东西都有效(=、* 等...任何东西)。
    • 不,fgetcsv 用于分隔数据,而不是固定宽度。你在| 上爆发的事实让我觉得可以有分隔符让生活更愉快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多