解析数据馈送

Posted

技术标签:

【中文标题】解析数据馈送【英文标题】:Parsing A Data Feed 【发布时间】:2010-09-18 05:11:08 【问题描述】:

我不是最擅长 php,如果有人能提供帮助,我将不胜感激。基本上我需要的每一行,并获取每个“|”之间的每一位信息- 然后我可以将它添加到数据库中。我想我可以通过使用explode从“|”之间获取信息,但是我需要一些帮助来将文本文件中的每一行解析为单数。事实上,为了让它更简单,我只需要它使用变量的每一行,我将使用 textarea 和表单将内容提交给变量。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您可以将文件读入行数组并使用以下方法进行所有拆分:

$lines = file("filename");
foreach($lines as $line) 
    $parts = explode("|", $line);
    // do the database inserts here

如果您已经按照您所说的将所有文本包含在变量中(例如,使用类似 file_get_contents() 的内容),您可以先在 \n​​ 上展开,然后执行与上述相同的 foreach 语句。

【讨论】:

【参考方案2】:

如果您正在阅读您的 textarea 帖子,您可以使用explode 函数,使用换行符作为分隔符,将变量中的每个“行”作为数组的新元素,然后您可以对您的数组元素。

$sometext = "balh | balh blah| more blah \n extra balh |some blah |this blah";

$lines = explode("\n", $sometext);
foreach($lines as $oneLine)

    $lineElements[] = explode("|", $oneLine);

那么你有一个二维数组。

如果您正在读取文件,您可以简单地使用此处记录的文件功能:

http://us2.php.net/manual/en/function.file.php

将文件的每一行作为数组的一个元素。

【讨论】:

【参考方案3】:

有一个现成的 PHP 解析库,可以自动检测 CSV 格式。

例子:

$reader = new Dfp_Datafeed_File_Reader();
$reader->setLocation('test.csv');

foreach ($reader AS $record) 
    print_r($record);

可以下载here,还有一些文档here。

【讨论】:

【参考方案4】:

如果文件很小,可以使用file() to 将其读入一个数组,每个元素一行。

如果失败,请使用 fgets() 循环读取文件

$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) 
   $buffer = fgets($handle, 4096);
   echo $buffer;

fclose($handle);

【讨论】:

【参考方案5】:

你可以使用explode来获得两者:

$myFile = "File.txt";
$fh = fopen($myFile, 'r');
$data = fread($fh);
fclose($fh);
$newLines = explode("\n",$data);

foreach($newLines as $s)

  $parsed = explode("|",$s);
  foreach($parsed as $item)
  
    // do your db load here
  

【讨论】:

以上是关于解析数据馈送的主要内容,如果未能解决你的问题,请参考以下文章

RSA Archer:使用邮件监视器数据馈送获取邮件的附件

RSA Archer 中的 Archer 到 Archer 数据馈送

股市数据馈送如何工作?

将 GenericCSVData 对象转换为反向交易者数据馈送

网页缓存数据馈送

Zingchart 实时数据馈送