提问人:user3649959 提问时间:11/13/2015 更新时间:11/13/2015 访问量:210
PHP: feof miss 最后一句话
PHP: feof miss last word
问:
这个问题很简单,但同时也很复杂。 Feof 没有打印我的最后一句话。它取自文件名 city 和 code (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,
答:
1赞
Mike Brant
11/13/2015
#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);
在上面的一条评论中,您提到您希望将 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);
评论
0赞
AbraCadaver
11/13/2015
@user3649959:查一下!
0赞
Mike Brant
11/13/2015
它是PHP的新行到BR标签的转换功能。php.net/manual/en/function.nl2br.php
0赞
Mike Brant
11/13/2015
@user3649959,如果您发现自己想要实际读取 CSV 并将城市和城市代码的值作为变量,那么您应该查看fgetcsv()
0赞
user3649959
11/13/2015
我正在尝试,但不明白如何从数组:D获取价值
0赞
user3649959
11/13/2015
我试过了,但它做了一个循环!编辑:对不起,我的错,好吧,它:D谢谢
0赞
iam-decoder
11/13/2015
#2
您的问题是,文件末尾没有换行符,因此它永远不会达到输出缓冲区内容的最后一个检查。"\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/>';
}
?>
评论
fgetcsv()
"\n"