这个问题很简单,但同时又很复杂。费没有打印我的遗言。它取自文件名城市和代码(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,
既然你似乎只是想按原样输出文件,唯一的改变就是用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);
在上面的一条注释中,您提到希望city和city值作为变量可用(尽管您的代码示例似乎没有指出这一点)。如果是这样的话,可以这样尝试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/>';
}
?>