2012-11-30 240 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

您可能想嘗試分解文件內容。它會幫助你很多!之後你會標註它。

相關問題