PHP: последние слова пропустить

Проблема проста, но сложна в то же время. feof не печатает мое последнее слово. Он берет из имени файла город и код (Venice,A908) и должен показывать в OUTPUT: nameCity,codeOfCity. Позвольте мне показать вам пример:

City.csv

Abano Terme,A001
Abbadia Cerreto,A004
Abbadia Lariana,A005
Abbiategrasso,A010
Zubiena,M196
Zuccarello,M197
Zuclo,M198
Zungri,M204

Код:

<?php
$buffer = "";
$file = fopen("City.csv", "r");

//while (($c = fgetc($file)) != EOF )
//while (($c = fgetc($file)) != NULL )
//while (($c = fgetc($file)) !== false )
while(!feof($file)) 
{       
    $c = fgetc($file);
    $buffer .= $c;

    if($c == ",")
    {
        echo $buffer;       
        $buffer = "";
    }

    if($c == "\n")
    {           
        echo $buffer."<br/>";

        $buffer = "";
    }           
}

fclose($file);
?>

ВЫХОД:

Abano Terme,A001 
Abbadia Cerreto,A004 
Abbadia Lariana,A005 
Abbiategrasso,A010 
Zubiena,M196 
Zuccarello,M197 
Zuclo,M198 
Zungri,

2 ответа

Поскольку кажется, что вы просто пытаетесь вывести файл как есть, единственное изменение заключается в замене разрывов строк HTML <br /> вместо символов новой строки, почему бы не упростить вещи?

echo nl2br(file_get_contents('City.csv'), true);

Или, если вы не хотите читать весь файл в память:

$file = fopen('City.csv', 'r');
while(!feof($file)) {       
    echo nl2br(fgets($file), true);
}
fclose($file);

В одном из комментариев выше вы упоминаете, что вы хотите, чтобы значения города и города были доступны в качестве переменных (хотя ваш пример кода, похоже, не указывает на это). Если это так, попробуйте fgetcsv() как это:

$file = fopen('City.csv', 'r');
while($values = fgetcsv($file)) {
    $city = $values[0];
    $city_code = $values[1];
    echo $city . ',' . $city_code . '<br />';
}
fclose($file);

Ваша проблема в том, что в конце файла нет новой строки, поэтому он никогда не попадет в последний "\n" проверьте, чтобы вывести содержимое буфера.

чтобы исправить это, вам просто нужно еще раз проверить это условие. менять

if($c == "\n")

чтобы:

if($c == "\n" || feof($file))

Вот гораздо более понятная и краткая версия вашего кода, если вы хотите использовать правильную функцию для анализа файла CSV:

<?php
$buffer = array();
$file = fopen("City.csv", "r");
while(!feof($file) && $buffer[] = fgetcsv($file));
fclose($file);
foreach($buffer as $line){
    echo join(',', $line).'<br/>';
}
?>
Другие вопросы по тегам