textファイルについての質問とその解決方法

このQ&Aのポイント
  • ディレクトリー内にあるtest.txtとaaa.txtという2つのテキストファイルを開き、test.txtの3行目に「http://www.goo.ne.jp/」、aaa.txtの10行目にも「http://www.goo.ne.jp/」が含まれる場合、aaa.txtの10行目を削除したいです。しかし、 aaa.txtの10行目を空にする方法がわかりません。詳しい方、ご教示いただけないでしょうか?
  • 質問者は、ディレクトリー内にある2つのテキストファイルを開き、特定の条件に合う場合に行を削除したいと考えています。しかし、行を削除する際に空にする方法がわからず困っています。質問者はスクリプトを投稿しており、削除の部分を詳細に説明してほしいと求めています。
  • 質問者は、ディレクトリー内のテキストファイルの特定の行を削除する方法を求めています。具体的には、あるテキストファイルの指定された行を削除するための方法が知りたいと考えています。質問者は、削除する行を空にする方法がわからないため、質問を投稿しています。
回答を見る
  • ベストアンサー

textファイルについて

あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

  • PHP
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

削除したい行を省いたデータをファイルに書き込むように処理すればよいのでは。例示されたコードを見ると、ファイルの内容を一旦配列に格納していることからファイルサイズが極端に大きいわけでもなさそうですので処理として問題ないかと思います。

fukurinnsa
質問者

補足

UmJammerさん回答有難う御座います aaa.txtの削除したい行以外をaaa.txtに上書きすると言う事ですか?? そんな事ができるのですか??

その他の回答 (1)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

ANo.1です。 >aaa.txtの削除したい行以外をaaa.txtに上書きすると言う事ですか?? その通りです。 >そんな事ができるのですか?? 試してみればわかるかと思いますが可能です。

関連するQ&A

  • プログラムの実行について

    os は windows php のバージョンは 5.2.11.11 です。 $logmax = file("test.txt"); $start = $logmax[count($logmax) - 1]; $start = trim($start); if ($start == "終了"){ $start = 1; } if (is_file("aaa.txt")){ $word = fopen("aaa.txt", "r"); for ($line = $start; !feof($word); $line++){ $lines = fgets($word); $lines = trim($lines); if ($lines){ 以下処理 } } } という感じの処理なのですが、三行目までは "test.txt" の最後の文字又は数字を抜き取る作業で 最初の if 関数はもし最後に "終了" ならば $start = 1 にするという感じです。 次の if 関数からが問題なのですが $start に 1 が入って "aaa.txt" の一行目からのスタートしてくれるのですが、 $start に 2 が入ってる場合は "aaa.txt" の二行目からスタートしたいのですが、 スタートしてくれず "aaa.txt" の一行目からスタートになってしまいます。 if 関数だとスタートが一行目からになってしまうのでしょうか?? それとも $lines = fgets($word); の所で "aaa.txt" の一行目からになっているのでしょうか?? 何が原因か分かる方がいましたらどうすればいいか教えてください。 宜しくお願いします

    • ベストアンサー
    • PHP
  • ファイルを読み込んで表示すると文字化けします

    次のようにファイルを読み込んでIEやGoogle Chromeで表示させると 日本語の文字化けが起こってしまいます・・・ どのようにすれば解決できるのでしょうか? [1.txt] ああ いい $file_name = "./1.txt"; if(is_file($file_name)){ $text = fopen($file_name,'r'); for($line = 1; !feof($text); $line++){ $lines = fgets($text); if($lines){ //print $lines; $pairs[] = preg_split('/ /', $lines); } } fclose($text); }else{ exit; } print_r($pairs);

    • ベストアンサー
    • PHP
  • TSVファイルを読み込んで表示したい

    $file="sample.txt"; // 変換対象TSVファイル $fpw = fopen($file,'r'); while (!feof($fpw)) {   $data = fgets($fpw));   $line = explode("\t", $data);   print "line= ".$line[0]."<br>";   print "line= ".$line[1]."<br>"; } としましたがうまく内容が表示されません。 どのようにしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • テキストファイルから指定区域の読み取り

    ネットの情報を受信してそのソースをテキストに書き出し、その一部を読み取るプログラムを作っている所なのですが、一部を読み取る所ができなくて悩んでいます。 特定の文字2つをキーワードにしてその間の行を表示させたいのですが、fgets関数を使えばいいのでしょうか? fp = ("12345.txt","r"); for(i=1;;i++){ if(fgets(line,1000,fp)==NULL){ if(ferror(fp)){ return -1; } if(feof(fp)) break; } if(i>counter && i<counter2){ printf("%s\n",line); } fclose(fp); このようにプログラムを組んでみてもできなくて困っています。 教えていただけたらうれしいです! イメージとしては、 ____________12345.txt_________________________ ajskd;flaskdjfids;fnmajcim;あいうa;sdlkfjaksl;dj sajdkfa;sldjfksdfjaisdf;jasdfne;lje;lijfla;efjja jal;jfnijndvdjfl;adsjfalsidjfalsidfjlaisdjf ajsdlf;jasildfja; ajsdfljaa aja ajdsfliajsdlf;iajdfli;jd ajsdiflajdfliajsdlfja ajdiflajdlfijdlaijfliasjliかきくasdf ajskdlf;jalksdjfaksdjfa ________________________________________________          ↓ sajdkfa;sldjfksdfjaisdf;jasdfne;lje;lijfla;efjja jal;jfnijndvdjfl;adsjfalsidjfalsidfjlaisdjf ajsdlf;jasildfja; ajsdfljaa aja ajdsfliajsdlf;iajdfli;jd ajsdiflajdfliajsdlfja このように「あいう」の下の行から「かきく」の上の行まで表示させることをしようとしています。 よろしくお願いします。

  • textファイルの関数について

    $logmax = file("test.txt"); $line = $logmax[count($logmax) - 1]; if ($line == "終了"){ $line = 1; } 今の段階で "test.txt" の最後の行を取得して もし最後の行が "終了" なら $line を 1 に変えたいのですが "終了" のままで変更されていません(泣) もちろん test.txt の最後の行に "終了" が入ってる事は確認済みです 何か他の方法 or 何が間違っているか分かる方がいたら教えてください。 宜しくお願いします。 流れとしては test.txt の最後の行を取得して 最後の行が "終了" なら 1 に変えると言う作業です。 宜しくお願いします。 osはwindows phpバージョンは5.2.11.11です

    • ベストアンサー
    • PHP
  • ファイルから読み込み

    お世話になっております。 テキストファイルを読み込んで、データベースに格納をしたいと思っております。 全角と半角、全角スペースや半角スペースなどが混在しているため 意図した通りに読み込めません。 test.txt -------------------------------------------------- 山田 太郎     ヤマダ タロウ   神奈川県○○○区1-2-3       0312345678 ・・・1\n\r 高橋 花子     タカハシ ハナコ  東京都○○○○区4-5-6       0312345678 ・・・1\n\r (カタカナは半角カタカナです。半角カタカナの後ろのスペースは半角スペースです。) sample.php(EUC) -------------------------------------------------- $fp = fopen($file_path, "r"); while (!feof($fp)) {  // テキストファイルがShift-JISなのでEUC-JPに変換  $row = mb_convert_encoding(fgets($fp), "EUC-JP", "Shift-JIS");  // 全角スペースは半角スペース2に変換  $line = str_replace(" ", " ", $row);  $d['name'] = trim(mb_substr($line, 0, 20));  $d['kana'] = trim(mb_substr($line, 20, 20));  $d['address'] = trim(mb_substr($line, 40, 40));  $d['tel'] = trim(mb_substr($line, 80, 20));    :    :  $d['flag'] = trim(mb_substr($line, 1300, 1)); } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】ファイル読み込みで「見えない文字」が発生する??

    PHP初心者です。 不思議な現象を経験したため質問させていただきます。 ファイルから文字列を読むとき、どうしても先頭に「見えない」文字がついてしまいます。見えない文字とは空白ではなく容積ゼロの文字のことで一種の文字化けと思われます。 <PHPプログラム> <?php header('Content-Type: text/html; charset=UTF-8'); header('Content-Language: ja'); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); print "ここに発生→"; if($fp = @fopen("file.txt", "r")){ while( !feof($fp) ){ $line = trim(fgets($fp)); print "$line"; } @fclose($fp); } ?> <データファイルfile.txt の中身> ←ここ!1行目 2行目 3行目 <出力結果> ここに発生→←ここ!1行目2行目3行目 出力結果にカーソルを持って行き、矢印キーで動かしていただければ → と ← の間でカーソルが1回動かず、何かが「存在」していることが確認できると思います。 このような文字は初めての経験でわけがわかりません。予防策がありましたらお願いいたします。 <環境> レンタルサーバーはPHP4.4.4(UTF-8) ローカルはWin-XP(3台で確認) プログラムもデータファイルもUTF-8で書いています。 <ほか> その文字自体をここに載せようとしましたが「」に変換されてしまいました。これは一体何でしょう??

    • ベストアンサー
    • PHP
  • phpを使いファイル内を検索

    phpでファイル内を検索したいです。 以下のようにphpを書きましたが、やりたいことは1行目から5行目までの中でphpという言葉を検索し6行目から10行目までの中でsnsという文字を検索といったように、行数で分けて検索する言葉も分けたいです。 どのように書いて良いかなどのヒントなどいただけないでしょうか。 $file = dirname(__FILE__) . '/list.txt'; $word = 'php'; if(is_file($file)){ $array = @file( $file, FILE_IGNORE_NEW_LINES); if(in_array($word,$array)){ print_r($word); } } ?>

    • 締切済み
    • PHP
  • テキストファイルの指定文字列表示2

    以前質問し、解決したかに見えたのですが、元ファイルに意外なケースがあることに気づき、再度質問させていただきます。 あるブラウザにて、あるテキストファイルの部分を抽出して表示させるスクリプトを考えております。 テキストファイル自体は同階層にあり(./aaa.txt)、不定期に更新されます。内容は下記<./aaa.txt>のような構成になっております。そして下段のphpスクリプト<vvv.php>ですと希望どおりに表示されるのですが、./aaa.txtファイルの中身は状況によっては空行が最初の1回しかないケースがあります。 その場合も、 222222222222 3333333333333 4444444444 のように"111111111111"を除いた、1回目の空行までは表示させたいのですが、何か良い方法はございますでしょうか? ※このようなファイルの場合<vvv.php>で実行すると、何も出力されません。 どうかご教授お願いいたします。 <./aaa.txt> ========= 111111111111 222222222222 3333333333333 4444444444 (空行) 55555555 6666666 66666666 8888888 (空行) 9999999999999999999999 ・ ・ ========= <vvv.php> ========= <?PHP function mytrim(&$item){//(1) $item=str_replace(Array("\r","\n"),Array("",""),$item); } $lines=file("./aaa.txt");//(2) array_walk($lines, 'mytrim');//(3) $blankline=array_keys($lines,"");//(4) $lastline=$blankline[1]-1;//(5) for($i=0;$i<=$lastline;$i++){ if($lines[$i]!="111111111111"){//(6) print $lines[$i]."<br>"; } } ?> =========

    • ベストアンサー
    • PHP
  • 他のサーバーのファイルを大量に読み込んだら迷惑?

     他のサーバーにアクセスして、大量のhtmlファイルを開き、fgets()でそれらを読み込んだら、相手方のサーバーには迷惑になるでしょうか?  (以下のような感じです。URLの部分は、hを大文字で記述しています) <?php $fp = fopen("http://somewhere.org/page1.html","r"); while(!feof()){ $line = fgets($fp); fwrite($fp,$line); } fclose(); $fp = fopen("http://somewhere.org/page2.html","r"); while(!feof()){ $line = fgets($fp); fwrite($fp,$line); } fclose(); //・・・これを数十回くらい。 ?>  又、迷惑になる場合、ファイルを1つ読み込んだあと、sleep();で何秒か停止すれば迷惑かけずに済むでしょうか? もしそうなら、大体何秒くらいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう