我正在尝试使用PHP从名为test.txt的逗号分隔文本文件中读取数据。文件内容如下:
Sel,10,5,4
Tati,5,6,7
Vinny,10,10,10
我尝试使用带有fgets()的循环来读取这些值,这个循环用于逐行打印,fgets()和explode(),它们应该在每行中为每个元素写入元素。
<?php
$file=fopen('test.txt','r');
if(!$file)
{
echo "Error reading file";
die;
}
echo"Reading Line by Line";
while(!feof($file))
{
$pointer=fgets($file,4096);
echo "<p>".$pointer."<p>";
}
rewind($file);
echo "Reading value by value per line";
while(!feof($file))
{
$pointer=fgets($file,4096);
$pieces = explode(",", $pointer);
echo"<hr>";
echo "<p> Name:".$pieces[0]."<p>";
echo "<p> Grade 1:".$pieces[1]."<p>";
echo "<p> Grade 2:".$pieces[2]."<p>";
echo "<p> Grade 3:".$pieces[3]."<p>";
echo"<hr>";
}
fclose($file);
?>
但是,当我在php中使用fgets()和explode()函数时,会打印一行没有值的行。这很奇怪,因为我的文本文件中只有三行,当我使用fgets()而没有explode()时,它返回正确行数的值。
此代码有什么问题?
修改:这是我的code
答案 0 :(得分:1)
@Mad我测试你的代码并解决了这个问题是因为<p>
标签没有在循环中关闭,所以关闭它们并且你的问题将解决: -
<?php
$file=fopen('test.txt','r');
if(!$file)
{
echo "Error reading file";
die;
}
echo"Reading Line by Line";
while(!feof($file))
{
$pointer=fgets($file,4096);
if(strlen($pointer) !==0){
echo "<p>".$pointer."</p>";
}
}
rewind($file);
echo "Reading value by value per line";
while(!feof($file))
{
$pointer=fgets($file,4096);
$pieces = explode(",", $pointer);
if(strlen($pointer) !==0){
echo"<hr>";
echo "<p> Name:".$pieces[0]."</p>";
echo "<p> Grade 1:".$pieces[1]."</p>";
echo "<p> Grade 2:".$pieces[2]."</p>";
echo "<p> Grade 3:".$pieces[3]."</p>";
echo"<hr>";
}
}
fclose($file);
?>
输出: - 在我的本地电脑: - http://prntscr.com/amufst
注意: - 我的文本文件在开始和结束时都没有空行。