人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPに関して
test.txt
----------------
1行目)aaa
2行目)bbb
3行目)ccc
----------------
このようにテキストに3行書かれています。

?これの3行目のみ→dddに変更し、
----------------
1行目)aaa
2行目)bbb
3行目)ddd
----------------
という形でtextファイルに保存するにはどうすればいいですか?

?変更したtextファイルの3行目のみを取り出すにはどうすればいいですか?

おねがいします

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:aaa CCC ddd test txt
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kurukuru-neko
●27ポイント

// ファイル全部読む

$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";

http://jp.php.net/manual/ja/function.file.php

http://jp.php.net/manual/ja/function.file-put-contents.php


2 ● Mook
●27ポイント

追記などに比べると、ファイル中の文字を書き換えるのは結構面倒です。

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";
?>

3 ● okuryu
●26ポイント

こんな感じでしょうか。

<?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];

?>

http://www.hatena.ne.jp/

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ