Анализ потока данных
Вопрос
Я не самый лучший специалист в PHP и был бы чрезвычайно благодарен, если бы кто-нибудь смог помочь.По сути, мне нужно проанализировать каждую строку потока данных и просто получить каждый бит информации между каждым "|" - тогда я могу добавить его в базу данных.Я думаю, что смогу справиться с получением информации между символами "|" с помощью explode, но мне нужна небольшая помощь в разборе каждой строки из текстового файла в единственном числе.Фактически, чтобы сделать это еще проще, мне просто нужно использовать каждую строку переменной, я отправлю содержимое в переменную, используя текстовое поле и форму.Мы были бы очень признательны за любую помощь!
Решение
Вы можете прочитать файл в массив строк и выполнить все разбиения с помощью:
$lines = file("filename");
foreach($lines as $line) {
$parts = explode("|", $line);
// do the database inserts here
}
Если у вас уже есть весь текст в переменной, как вы сказали (например, с чем-то вроде file_get_contents ()), вы можете сначала взорвать \ n, а затем выполнить то же выражение foreach, что и выше.
Другие советы
Если вы читаете из своего сообщения textarea, вы можете использовать функцию explode, используя символ новой строки в качестве разделителя, чтобы получить каждую "строку" в переменной как новый элемент массива, тогда вы можете выполнить 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);
}
тогда у вас есть 2d-массив ваших элементов.
Если вы читаете из файла, вы можете просто использовать функцию file, описанную здесь:
http://us2.php.net/manual/en/function.file.php
чтобы получить каждую строку файла как элемент массива.
Существует готовая библиотека синтаксического анализа PHP, которая может автоматически определять формат CSV.
Пример:
$reader = new Dfp_Datafeed_File_Reader();
$reader->setLocation('test.csv');
foreach ($reader AS $record) {
print_r($record);
}
Его можно скачать здесь, и там есть кое-какая документация здесь.
Если файл небольшого размера, вы можете использовать file () t , чтобы прочитать его в массив по одной строке на элемент.
Если этого не произойдет, прочитайте файл в цикле, используя fgets ()
$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
Вы можете использовать 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
}
}