Разбор файла в PHP; как обнаружить переводы строки? - PullRequest
1 голос
/ 11 февраля 2011

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

Joe
Johnson

Linus
Tourvalds

и при парсинге в php мне нужно уметь обнаруживать переводы строки. Я пытаюсь правильно определить $ newline. Я перебираю массив строк в переменной $ file.

while($line = next($file))
    if($line = $newline)
        echo "new line";

Проблема в том, что я не могу подобрать символ новой строки. Я знаю, что он действительно отображается в массиве $ file, потому что это:

while($line = next($file))
    echo $line;

выводит файл дословно, с символами новой строки и всем. Я уже пробовал "\ n", "", и я не уверен, что делать дальше. Небольшая помощь?

Ответы [ 3 ]

1 голос
/ 11 февраля 2011
$file = file("path/to/file.txt");

// Incase you need to call it multiple times ...
function isNewLine($line) {
    return !strlen(trim($line));
}

foreach ($file as $line) {
    if (isNewLine($line)) {
        echo "new line<br/>";
    }
}
0 голосов
/ 01 сентября 2011

Я думаю, что это решение может помочь вам, ребята. Это работает, если вы анализируете CSV, который генерируется из Mac или Windows. Чтение csv с помощью мультилиней, созданных в Mac, создает проблему, т. Е. Вы не можете прочитать каждую строку в цикле, но все данные csv читаются как одна строка.

Эта проблема решается следующим решением:

//My CSV contains only one column
$fileHandle = fopen("test.csv",'r');
$codesArray    = array();
count = 0;
while (!feof($fileHandle) ) {
$line = fgetcsv($fileHandle);
if($line[0]!="") {
   $data = str_replace("'", "", (nl2br ($line[0])));
   $dataArray = explode('<br />' ,$data );
   foreach($dataArray as $data) {
       $codesArray[] = trim($data);
   }
}
}
echo "<pre>";
print_r($codesArray);
0 голосов
/ 11 февраля 2011

Может быть, что-то вроде этого будет работать для вас?

while($line = next($file)) {
    if(in_array($line, array("\r", "\n", "\r\n"))) {
        echo "new line";
    }
}
...