Разбор потока данных - PullRequest
       15

Разбор потока данных

3 голосов
/ 21 октября 2008

Я не лучший в PHP и был бы чрезвычайно признателен, если кто-то может помочь. По сути, мне нужно проанализировать каждую строку потока данных и просто получить каждый бит информации между каждым "|" - тогда я могу добавить его в базу данных. Я думаю, что могу справиться с получением информации между "|", используя explode, но мне нужно немного помочь с разбором каждой строки из текстового файла как единственного числа. Фактически, чтобы сделать это еще проще, мне просто нужно использовать каждую строку переменной, я передам содержимое в переменную, используя текстовую область и форму. Любая помощь будет принята с благодарностью!

Ответы [ 5 ]

4 голосов
/ 21 октября 2008

Вы можете прочитать файл в массив строк и выполнить все разбиения с помощью:

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

Если у вас уже есть весь текст в переменной, как вы сказали (например, с чем-то вроде file_get_contents ()), вы можете сначала взорвать \ n, а затем выполнить тот же оператор foreach, что и выше.

2 голосов
/ 21 октября 2008

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

т.е.

$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 массив ваших элементов.

Если вы читаете из файла, вы можете просто использовать описанную здесь функцию файла:

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

чтобы получить каждую строку файла как элемент массива.

1 голос
/ 06 июня 2012

Существует готовая библиотека для разбора PHP, которая может автоматически определять формат CSV.

Пример:

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

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

Доступно для скачивания здесь , и есть некоторая документация здесь .

0 голосов
/ 21 октября 2008

Вы можете использовать взрыв, чтобы получить оба:

$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
  }
}
0 голосов
/ 21 октября 2008

Если файл небольшой, вы можете использовать file () t o для чтения его в массив, по одной строке на элемент.

Если этого не сделать, прочитайте файл в цикле, используя fgets ()

$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
   $buffer = fgets($handle, 4096);
   echo $buffer;
}
fclose($handle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...