2008-10-20 90 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