从text / csv文档中读取内容与数据不一致

时间:2014-07-01 19:54:33

标签: php fgetcsv

我正在尝试从不是csv或txt的源导入数据,但我可以像使用我的代码的text / csv一样读取它。

我遇到的问题是一些"数据记录"不遵循相同的逻辑。我有大约70%的文件符合要求,但是,我想我可能会遗漏数据中丢失结果的东西。

如果您能看一下代码和文件,我会很感激,并帮助我弄清楚为什么有些数据不像文档的其他部分那样工作。我怀疑是因为其中一个字段中有奇数个字符(〜和/或>),或者某些记录的开始/停止略有不同。

<?php
header("Content-Type:text/html");

$file = "data.txt";
if (($handle = fopen($file, "r")) !== FALSE) 
    {
        fgetcsv($handle, 1000, ">~Yn");
        $imports = array();

            while (($data = fgetcsv($handle, 1000, ">")) !== FALSE) 
            {
                if(strpos($data[4],'<') !== false)
                    {
                        echo "<br /><strong>Section:</strong> " . $data[5];
                        echo "<br /><strong>Row:</strong> " . $data[6];
                        echo "<br /><strong>Qty:</strong> " . $data[7];
                        echo "<br /><strong>Price:</strong> " . $data[8];
                        echo "<br /><strong>Notes:</strong> " . $data[10];
                    }
                else
                    {
                        echo "error: ";
                        print_r($data);
                    }
                echo "<br /><br /><br /><br />";
            }

            fclose($handle);
    }
?>

可以在此处找到示例数据:Sample Data

1 个答案:

答案 0 :(得分:0)

我找到了一种比我最初尝试的方法更好的解决方案。我首先确定将其加载为CSV并没有给我最好的结果。然后我意识到每个记录之间都有我常见的分隔符。话虽这么说,我将内容分成行,然后使用split()将行拆分为多个部分。由于数据不匹配,我也忽略了第一场和最后一场比赛。

$file = "data.txt";
$content = file_get_contents($file);
$lines = split(">~", $content);
foreach($lines as $line)
    {
        $data = split(">", $line);

        if(strpos($data['5'],'.') !== false) //if the section is a price
            {
                //the first match is ignored
            }
        elseif(empty($data['7'])) //if Qty is empty
            {
                //the last match is ignored
            }
        else
            {
                echo "<br><br><br>";
                echo $data['5'] . " (Section) <br>";
                echo $data['6'] . " (Row) <br>";
                echo $data['7'] . " (Qty) <br>";
                echo $data['8'] . " (Price) <br>";
                //use the data
            }
    }

这样可以更准确,更全面地收集数据!