-1

问题很简单,但同时也很复杂。feof 没有打印我的最后一句话。它取自文件名城市和代码(威尼斯,A908),并应显示在 OUTPUT:nameCity,codeOfCity。让我给你看一个例子:

城市.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,
4

2 回答 2

1

既然您似乎只是想按原样输出文件,只是更改为替换 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);
于 2015-11-12T18:54:08.053 回答
0

您的问题是,文件末尾没有换行符,因此它永远不会命中最后一次"\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/>';
}
?>
于 2015-11-12T18:56:54.083 回答