本文命題如標題所示:刪除現實存在的文本文件的指定行,這一行可以是任意的,即由用戶決定。刪除文本文件的任意一行非常有意義,比如,我們用一個文本文件記錄注冊用戶的相關資訊(每一行一條資訊),現在我們需要刪除其中的某一條。
實現思路:
將文件逐行讀入數組,然后遍歷數組並把數組各元素的值添加到要保存的字符串中,當處理到對應於要刪除的行的數組元素時不讀入它,最后保存文件。
實現方法:
$num=2; //要刪除的行序號 $fp=file("test.txt"); $total=count($fp); //取得文件總行數 foreach ($fp as $line) { //按行分解內容並 $tmp[]=$line; //逐行寫入數組 } for($i=0;$i<$total;$i++){ //若$i的值不等於要刪除的行序號 if($i<>$num) $savestr.=$tmp[$i]; } //寫入文件 $fp=fopen("test.txt","w"); fwrite($fp,$savestr); fclose($fp);
執行以上PHP程序,它將刪除test.txt文件的第三行。文件的行序列號從0算起,而不是我們通常所理解的從1算起,這與數組元素的下標序號是一樣的情形。
有一個問題需要弄清楚,就是所謂的“行”的概念。讓我們用記事本寫一個文件,一行結束后我們打一個回車或者不打,保存該文件后該文件就有了一行;如果我們打完一行后回車再打一行,保存后文件就有兩行。在記事本里,當我們設置格式為“自動換行”,一行文字寫到最右端時會自動折行,但那不是兩行,它依然只是一行。在記事本里,不論有多少文字,也不論格式是否為“自動換行”,如果一直沒有回車符,那么就只能是一行。換句話說,行的標志是回車符(PHP記作“"\r\n"”)。
修改以上程序,我們還可以輕易地刪除文件里所有空的行(只有空格+回車符或只有回車符的行):在遍歷數組並讀入保存字串時用trim檢測每一個數組元素——
for($i=0;$i<$total;$i++){ if(trim($tmp[$i])<>"") $savestr.=$tmp[$i]; }
這個程序將刪除文件中的所有空行,但假若文件的最后一行為空行,則會清除其空格符(如果有的話)然后保留一個回車符(它被當作文件末尾的指針標志)。
來自:http://blog.sina.com.cn/s/blog_4ccb963201000921.html