PHP,使用fgets跳过文本文件的第一行和最后一行

3

我正在尝试在使用fgets()读取文本文件时跳过第一行和最后一行。第一行可以通过 if(!$firstLine) 解决,但我不确定如何忽略最后一行,或者我的解决方案是否是最佳选择。


1
file()函数将每一行读入数组中,使得你想要做的事情变得容易。 - user557846
5个回答

10
fgets($file); //Ignore the first line
$line = fgets($file);
$next = fgets($file); 
while ($next !== false) { //check the line after the one you will process next.  
                //This way, when $next is false, then you still have one line left you could process, the last line.
    //Do Stuff
    $line = $next;
    $next = fgets($file);
}

如果文件的最后一行是“0”或为空,则它会过早中断。 - lupatus
好的,没问题。我会继续修复它。 - femtoRgon

0
$lines = file('http://www.example.com/');//or local file

unset($lines[0]);
unset($lines[count($lines)-1)]);
$new_file = implode('', $lines); //may want to use line break "\n" for the join

如果只有一行或者没有怎么办? - lupatus
1
好的,问题说要跳过第一行和最后一行,所以我只能假设有超过3行——除此之外,我没有更多的信息可供参考。 - user557846

0
你可能想尝试将文件内容分解。这会对你有很大帮助!之后你可以给它打上标签。

-1

试试这个

 $str= file_get_contents("file.txt");
 $arr = preg_split ("\n",$str);
 $n = count($arr);

$n是行数

$str="";
for($i=0;$i<$n;$i++){
   if($i>0 && $i<($n-1)){ $str.=$arr[$i]}
   }
    /**Str without line 1 and final line */

-1

不幸的是,file() 函数会将文件打开为“串行”流(不确定“串行”是否是正确的词),这意味着在检测到文件结尾之前,您必须读取整个文件。


虽然它是一个流,但完全不正确的是你不知道文件结束在哪里,必须读取整个文件。$fp = fopen($path, 'r'); fseek($fp, -16); $end = fgets($fp);应该返回文件的最后16个字节(如果至少有16个字节),而无需读取整个内容。 - lupatus
第二件事是,file函数不会将文件作为流打开 - 它会读取其内容并将其作为行的数组返回给您。 - lupatus
我的回答与问题有关,我并没有说没有办法获取文件末尾的字符,但是没有办法在不读取文件的情况下跳过最后一行。如果你查看最后16个字节,那么它不会跳过最后的字节...,所以你必须读取整个文件,然后跳过它的最后一行。或者还有其他方法吗? - jorj
哦,你说的是 file() 函数吗...我把它和 fopen 函数混淆了。 - jorj
现在看一下函数file(),它提供了另一种方法来实现这个功能:array_pop(array_shift(file("YourFile")))。 - jorj
array_shift将返回file返回的数组的第一个元素,这样您将生成只有变量可以通过引用传递。正确的方法是array_slice(file($path), 1, -1) - lupatus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接