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);

さて、Asad のコメントの後に、もう 1 つの簡単な答えがあります。ファイルを追加モードhttp://de3.php.net/manual/en/function.fopen.phpで開くだけです:

$writing = fopen('contacts.tmp', 'a');
于 2012-11-09T19:53:25.350 に答える