2008-10-20 2 views
3

Я не лучший на PHP и был бы очень благодарен, если бы кто-нибудь мог помочь. В основном мне нужно разобрать каждую строку данных и просто получить каждый бит информации между каждым «|» - тогда я могу добавить его в базу данных. Я думаю, что я могу обработать получение информации между «|» с помощью взрыва, но мне нужно немного помочь в синтаксическом анализе каждой строки из текстового файла как единственного числа. Infact, чтобы сделать его еще более простым, мне просто нужно использовать каждую строку переменной, я отправлю содержимое переменной с помощью текстового поля и формы. Любая помощь будет принята с благодарностью!Parsing A Data 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

Если вы читаете из вашего TEXTAREA поста, вы можете использовать функцию взрывать с помощью символа новой строки, как ваш разделитель, чтобы получить каждую «линию» в переменной как новый элемент массива, тогда вы можете взорвать элементы массива.

т.е.

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

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

то есть 2d массив ваших 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.