2012-11-30 242 views
2

我想知道如何在使用fgets()时读取它时跳过文本文件的第一行和最后一行。第一行可以用if(!$firstLine)来解决,但我不知道如何忽略最后一行,或者如果我忽略第一行的解决方案是最佳选择。PHP,使用fgets跳过文本文件的第一行和最后一行

+1

file()将每行放入一个数组中,使您想要的操作变得简单。 – 2012-11-30 00:12:00

回答

7
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

+0

够公平的,是的。我会继续解决这个问题。 – femtoRgon

-1

不幸的是,文件()打开文件到“串行”流(不知道是否序列是正确的话),这意味着你必须检测他的结局

+0

它确实是它的一个流,但是你不知道文件的结尾在哪里,而且你必须读整个文件。 '$ fp = fopen($ path,'r'); fseek($ fp,-16); $ end = fgets($ fp);'应该返回最后16个字节的文件(如果它至少有16个字节),而不读取整个内容。 – lupatus

+0

第二件事情是,'file'函数不是以流的形式打开文件 - 它会为您读取其内容并返回为线阵列。 – lupatus

+0

我的回答是与问题有关,我没有说,没有办法在文件末尾获取字符,但没有办法在没有读取文件的情况下跳过最后一行。如果您将查看最后16个字节,那么将不会跳过最后一个字节...,因此您必须读取完整文件,然后跳过最后一行。或者有其他方法? – jorj

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 
+0

如果只有一行或不存在,该怎么办? – lupatus

+1

以及问题说,跳过第一个和最后一个*行*,所以我只能假设有超过3 - 我没有更多的事情要比那个被问到 – 2012-11-30 02:17:24

+0

我同意@Dagon。他不应该因为发布有效答案而得到2个不喜欢的... – 131

-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 */ 
0

您可能想尝试分解文件内容。它会帮助你很多!之后你会标注它。

相关问题