test.txt
----------------
1行目)aaa
2行目)bbb
3行目)ccc
----------------
このようにテキストに3行書かれています。
①これの3行目のみ→dddに変更し、
----------------
1行目)aaa
2行目)bbb
3行目)ddd
----------------
という形でtextファイルに保存するにはどうすればいいですか?
②変更したtextファイルの3行目のみを取り出すにはどうすればいいですか?
おねがいします
// ファイル全部読む
$texta = file("text.txt");
// 1行目と3行目を入れ替えて保存
if( count($texta)>=3 ) {
$tmp = $text[0];
$text[0] = $text[2];
$text[2] = $tmp;
file_put_contents("text.txt",$text);
};
// 3行目を確認(改行を除去)
$data = str_replace("\n","",$text[2]);
print "Line 3 = " . $data . "\n";
追記などに比べると、ファイル中の文字を書き換えるのは結構面倒です。
php でやる必要がなければ、外部コマンド等を使用したほうが簡単かもしれません。
PHP でやる場合、file 関数を使ったりいろいろなやり方があると思いますが、基本的なfopen関数を使った例です。
<? define( "TEXT_FILE", "C:\Test.txt" ); // 対象ファイル define( "TEXT_BACKUP_FILE", "C:\Test.bk.txt" ); // バックアップファイル(オリジナル) define( "REPLACE_STRING", "zzzz" ); // 書き換え文字列 copy( TEXT_FILE, TEXT_BACKUP_FILE ); // ファイルをコピー $rh = fopen(TEXT_BACKUP_FILE, 'r'); $wh = fopen(TEXT_FILE, 'w'); $lineCounter = 1; while (!feof($rh)) { if ( $lineCounter == 3 ) { // 3行目だったら書き換え文字列を出力 fputs( $wh, REPLACE_STRING."\n" ); print "[".fgets($rh)."]⇒[".REPLACE_STRING."]<br>.\n"; } else { // 他はただコピー fputs($wh, fgets($rh) ); } $lineCounter++; } fclose( $rh ); fclose( $wh ); print TEXT_FILE."を更新しました。<br>\n"; ?>
こんな感じでしょうか。
<?php // データを配列に読み込む $txt = @file('test.txt'); // 3行目のデータを変更 $txt[2] = 'ddd'; $fp = @fopen('test.txt', 'w'); // 1行ずつファイルへ書き込み foreach ($txt as $line) { fwrite($fp, $line . "¥r"); } fclose($fp); // 変更した3行目を表示 echo $txt[2]; ?>
コメント(1件)
$text = file("text.txt");
// 3行以下なら1行目、2行目を追加
if( count($text)< 3 ) {
$text[0] = "\n";
$text[1] = "\n";
};
// 3行目を変更して保存
$text[2] = "ddd" . "\n";
file_put_contents("text.txt",$text);