问题很简单,但同时也很复杂。 feof不打印我的遗言。它取自文件名城市和代码(威尼斯,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,
答案 0 :(得分: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);
答案 1 :(得分: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/>';
}
?>