PHPに関して

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

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

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

おねがいします

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/20 19:58:31
  • 終了:2007/03/27 20:02:08

回答(3件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/21 01:28:14

ポイント27pt

// ファイル全部読む

$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

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/03/20 20:30:20

ポイント27pt

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

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";
?>
id:okuryu No.3

okuryu回答回数72ベストアンサー獲得回数32007/03/21 20:20:38

ポイント26pt

こんな感じでしょうか。

<?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/

  • id:kurukuru-neko
    修正 texta -> text
    $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);


この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません