2012-11-09 89 views
0

我有一個文本文件,lastname, first name, address, state, etc存儲爲|分隔符和每條記錄在一個單獨的行上的字符串。使用php替換文本文件中的特定行?

我有我需要將每條記錄存儲在新行上並且工作正常的部分;但是,現在我需要能夠返回並更新特定行的名稱或地址,並且我無法使其工作。

how to replace a particular line in a text file using php?幫助我在這裏,但我還沒有那麼。這會覆蓋整個文件並丟失記錄。任何幫助表示讚賞!

經過一些編輯似乎現在工作。我正在調試以查看是否有任何錯誤。

$string= implode('|',$contact); 

$reading = fopen('contacts.txt', 'r'); 
$writing = fopen('contacts.tmp', 'w'); 

$replaced = false; 

while (!feof($reading)) { 
$line = fgets($reading); 

    if(stripos($line, $lname) !== FALSE) {   
if(stripos($line, $fname) !== FALSE) { 
    $line = "$string"; 
    $replaced = true; 
}  
    } 

    fwrite($writing, "$line"); 
    //fputs($writing, $line); 
} 
fclose($reading); fclose($writing); 

// might as well not overwrite the file if we didn't replace anything 
if ($replaced) 
{ 
    rename('contacts.tmp', 'contacts.txt'); 
} else { 
unlink('contacts.tmp'); 
} 
+1

請您解釋一下當您說'這會覆蓋整個文件'時,您的意思。所有的行都成爲相同的記錄嗎? –

+0

整個文件contacts.txt變爲空白。我有一個單獨的腳本添加了條目,所以我在那裏首先進行測試。當我運行這段代碼時,它會擦除​​文件中的所有內容。此外,我更喜歡在不將可能的數組中的整個文件傾倒的情況下完成此操作,以防文件在將來變得太大。試圖使其使用更少的內存。謝謝。 – user1781482

+0

'contacts.txt'不可能變爲空白,它以只讀模式打開。你的意思是'contacts.tmp'嗎? –

回答

2

看來你有一個csv格式的文件。 PHP可以用fgetcsv處理這個()http://php.net/manual/de/function.fgetcsv.php

if (($handle = fopen("contacts.txt", "r")) !== FALSE) { 
    $data = fgetcsv($handle, 1000, '|') 
    /* manipulate $data array here */ 
} 

fclose($handle); 

所以,你得到一個數組,你可以操縱。在此之後,你可以將文件保存fputcsv http://www.php.net/manual/de/function.fputcsv.php

$fp = fopen('contacts.tmp', 'w'); 

foreach ($data as $fields) { 
    fputcsv($fp, $fields); 
} 

fclose($fp); 

好了,由阿薩德的意見後,還有一個簡單的答案。只需在追加模式下打開文件http://de3.php.net/manual/en/function.fopen.php

$writing = fopen('contacts.tmp', 'a'); 
+0

但這與他的問題是切線的。 –

+0

你是對的,但我希望我沒有想太多。我爲真正的問題的解決方案添加了額外的信息。 – Varon

+0

所以我改變了一些事情,它似乎現在工作:) – user1781482