0

我有一个文本文件,它存储lastname, first name, address, state, etc为带有|分隔符的字符串,每条记录都在单独的行上。

我有需要将每条记录存储在新行上的部分,并且工作正常;但是,现在我需要能够返回并更新特定行上的名称或地址,但我无法让它工作。

如何使用 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');
}   
4

1 回答 1

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');
于 2012-11-09T19:53:25.350 回答