2008-10-20 91 views
3

我不是最好的PHP,如果有人能帮忙,我会非常感激。基本上我需要解析datafeed的每一行,并在每个“|”之间获取每一点信息 - 然后我可以将它添加到数据库。我认为我可以通过使用爆炸来处理从“|”之间获取信息,但我需要一些帮助将每行从文本文件解析为单数。事实上,使它更简单,我只需要它使用变量的每一行,我会使用textarea和表单提交内容到变量。任何帮助将不胜感激!解析数据Feed

回答

4

您可以文件读入线的阵列,并完成所有的分裂与:

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

如果你已经有一个变量的所有文字如你所说的(例如,用类似的file_get_contents() ),你可以先在\ n上爆炸,然后按照上面的方法执行相同的foreach语句。

+0

@ zuk1:如果您正在阅读实际文件,这将起作用。 – 2008-10-21 07:01:36

0

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

做不到这一点,使用fgets()

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

如果你正在读你的文字区域后的读取循环中的文件,你可以使用使用换行符爆炸功能的分离让每一个“行”在变量中作为一个数组的新元素,那么你可以在你的数组元素上爆炸。

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

$lines = explode("\n", $sometext); 
foreach($lines as $oneLine) 
{ 
    $lineElements[] = explode("|", $oneLine); 
} 

那么你有你的elems的一个二维数组。

如果你正在读出一个文件,你可以简单地使用这里记录的文件功能:

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

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

+0

@ zuk1:如果你实际上没有读取文件,这将起作用。 – 2008-10-21 07:00:45

0

你可以用爆炸来获得两个:

$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 
    } 
} 
1

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

例子:

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

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

这是可供下载here,并有一些文档here