• 締切済み

C言語でテキストファイルの内容を置換して保存したい

C言語でテキストファイルを読み込んで、特定のキーワードを 見つけたら置換して、保存したいと考えています。 ネット上でテキストファイルの内容を置換して、保存するよう な情報を検索したのですが、見つからず質問することにしました。 例) hoge.txtを読みこんで、FLG=0となっている行を、FLG=1というように置換させたい。 FLG=0 ↓ FLG=1

みんなの回答

noname#74310
noname#74310
回答No.3

FLG = 0; FLG = 0x0000; => FLG=1 という行も置換するのですよね。 生産性を考えたら C# かPerlが便利だと思います。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★『strstr』関数の方が便利ですよ。 ・回答者 No.1 さんの『strcmp』関数で1文字ずつずらして比較するのが基本的な  アルゴリズムですが、strstr 関数は文字列から指定文字列を探します。  戻り値は見つかったポインタ位置を返します。見つからないと NULL を返します。 ・簡単な置換アルゴリズムは  (1)ファイルから行単位で読み込む  (2)その文字列から検索文字列『FLG=0』を探す。  (3)見つからない場合は文字列のすべてを置換後ファイルに書き出す。→(8)へ進む  (4)見つかった場合は、行の先頭から発見された位置までを置換後ファイルに書き出す。  (5)置換後の文字列『FLG=1』を置換後ファイルに書き出す。  (6)発見されたポインタ位置に検索文字列『FLG=0』の長さ +5 を加える。  (7)(2)へ戻り検索文字列を再検索させる。  (8)ファイルの最後でないならば(1)へ戻り、EOF ならば終了 ・上記が簡単な置換アルゴリズムです。 サンプル: char *search = "FLG=0"; ←検索前の文字列 char *string = "FLG=1"; ←置換後の文字列 while ( fgets(buff,sizeof(buff),fp) != NULL ){ …(1)  for ( seek = buff ; (find = strstr(seek,search)) != NULL ; seek = find ){ …(2)   fprintf( fo, "%.*s", (find - seek), seek ); …(4)   fputs( string, fo ); …(5)   find += strlen( search ); …(6)  }  if ( find == NULL ){ …(3)   fputs( seek, fo );  } } 解説: ・上記のサンプルの fp、fo がそれぞれ置換前、置換後のファイルポインタを表す。  『search』が置換前の検索文字列で『string』が置換後の出力文字列になります。 ・for 文ブロック内が1行のデータから『search』文字列を探す繰り返しです。  繰り返す理由としては、1行の中に検索文字列『FLG=0』が複数あった場合に対応するためです。 ・fprintf 関数で『%.*s』という見慣れない指定をしていますが、これは (find - seek) の長さ分だけ  seek 文字列を出力する動作になります。『*』文字は出力精度の指定を引数で行う指示です。 ・なお、サンプルの番号(1)~(6)は最初に述べた『簡単な置換アルゴリズム』の番号と一致します。  両方を対応して仕組みを理解して下さい。 ・以上。おわり。→下の『参考URL』もどうぞ。

参考URL:
http://www9.plala.or.jp/sgwr-t/lib/strstr.html
noname#38837
noname#38837
回答No.1

ファイルから文字列を1行読み込む 読み込んだ文字列の頭から"FLG=0"を探す   →ポインタを1文字づつ後ろにずらしていってstrcmpなどを使う 見つかったら文字列を書き換える   →0を1にするだけなら、(ptr+4)の位置に'1'を格納する 文字列1行をファイルに書き出す ではダメなのですか? 本当は置換の条件が複雑なのでしょうか

関連するQ&A

  • いっぱいあるテキストファイルの中身を置換したい

    テキスト内容の置換について正規表現を用いた場合について?どなたか教えてください。 テキストが100個くらいあるので「Greplace」を使っています。他にいい方法があればソフトは使いませんが・・・ <br> テキストの中身はだいたい300行くらいです。 中身は例として下記のような感じです。 A111_selection_TXCDISU・・・・・・・・・・・・ B222_boot_TXCDISU・・・・・・・・・・・・ C333_DDcommand_TXCDISU・・・・・・・・・・・・ A234_Xmensanjo_TXCDISU・・・・・・・・・・・・ ・ ・ ・ ・ ・ やりたいことは特定のキーワードをor検索をしてそのキーワードが“ない”行だけを別の文字に置換したいんです。 キーワードが多く50ワードくらいあります。 A111|B222|C333と区切って検索は出来るのですがこれを含む列は置換せずその他を置換したいのですがどうしたらよいのでしょうか? 欲しい結果は下記のようにです。 A111|B222|C333を含む行以外をmoeyanで置換 A111_selection_TXCDISU・・・・・・・・・・・・ B222_boot_TXCDISU・・・・・・・・・・・・ C333_DDcommand_TXCDISU・・・・・・・・・・・・ A234_moeyan_TXCDISU・・・・・・・・・・・・ ・ ・ ・ ・ ・

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • テキストファイルの中身を自動で置換したい

    VBA初心者なので説明不足な部分があると思いますがよろしくお願い致します 現在テキストファイルを開いてCtrl+Hで検索する文字列を検索 置換後の文字列を入力し置換しているのですが ファイル数が多く1つ1つ開いて置換するのがとても面倒です Excelで開けば良いのでは?と前にご意見をいただいたのですが Excelで開いてそこからの操作がよくわからず…。 できればボタン一つで自動的に置き換えられるようにしたいのですが どのようにコードを書けば良いのかまったくわかりません。 ・指定フォルダー内にある(1つまたは複数の)テキストファイル内の文字列をすべてセルに書き出す ・セルから特定の文字(例→【 ,F1 】)を検索し、特定の文字(例→【 ,A2 】)に置換する ・上書きして保存 という感じにしたいのですができますでしょうか? 無理そうでしたら大丈夫です 閲覧いただきありがとうございました

  • C#でテキストファイルの更新がしたい

    C#でテキストファイルを読込み、特定の文字を置換して上書きしたいです。 StreamReaderで読み込んで、変数に退避し、StreamWriterで書くのは出来ると思いますが もっと簡単に、読み込んでRewriteのようなコーディングって出来ないのでしょうか? A.Txt あああ いいい ううう ↓ 【あああ】を【えええ】にしてA.Txtを上書き A.Txt えええ いいい ううう 何かいい方法があれば教えてください。 よろしくお願いいたします。

  • テキストファイルの一部を複数パターンで置換

    初めて質問させていただきます。 以下のようなテキストファイル(元ファイル) があります。 1行目 あいうえお 2行目 codea=aaaaa/$$ 3行目 codeb=11111*11111 4行目 … この2行目と3行目の「aaaaa」「11111」 の文字列を以下に従って置換し保存したいです。 置換パターンは、 別ファイルに一覧になっています。 bbbbb 22222 ccccc 33333 … これを、元ファイルの 「aaaaa」を「bbbbb」に、 「11111」を「22222」に置換し、 ファイル名を「bbbbb-22222.txt」として 保存するのを、 置換パターンの数だけ行う必要があります。 VBA、バッチは経験があります。得意分野ではありませんが… 申し訳ありませんが、ご教授いただけないでしょうか?

    • ベストアンサー
    • CSS
  • C言語での置換処理について

    引数で指定されたディレクトリ配下のファイル全てに置換処理を行う 処理をC言語で作成したいと考えています。 ディレクトリ配下には、最大で100MB位のファイルが約100件存在する 想定です。 (ファイルのサイズ、件数は実行毎に異なります。) そこで2点ほど教えていただきたいことがあります。 1.基本的に、UNIXコマンドのtrコマンドでで置換するより、C言語で   全てのファイルを開き1行ずつ、「置換文字列のチェック」→   「置換文字列が存在すれば置換」→「ファイル書込み」と行った   ほうが早いものでしょうか?   (trコマンドを実行したところ、10分待っても処理が完了しませんでした。) 2.C言語にてディレクトリ配下のファイル名を取得し、ファイルの   件数分ループさせるにはどのようにすればよいのでしょうか?   execコマンドにて「ls -l test.txt | awk '{print $○}'」   (ファイル名のみ取得)の結果をファイルに出力し、そのファイル   からファイル名を取得し、EOFになるまでループすることで出来る   と思いますが、この方法は一般的でしょうか?   出来れば余計なファイルは、作成したくないと考えています。 ご回答の方、よろしくお願いします。

  • テキストファイルから漢字や数値を検索する方法

    C言語初心者です。自分の力では解決できそうもないので質問しました。よろしくお願いします。 テキストファイルをオープンして、そのファイルにある特定の漢字を 検索するプログラムはどのように書けばよいのでしょうか。 例:テキストファイル: sample.txt(500byet) 検索する漢字  : こんにちわ よろしくお願いします。

  • C言語でテキストファイルのデータ処理

    はじめまして。 僕はC言語に関して全くの初心者です。 どうぞよろしくお願いします。 例えば、 1,0,0,7,6 2,0,0,5,5 3,1,0,4,9 : : のようなテキストファイル、test.txtがある時、 1行目の4カラム目(7)と5カラム目(6)を、 それぞれの行について差し引くプログラム、 つまり全ての行について4カラム目は7を引き、 5カラム目は6を引くプログラムの事で、 この例では、 1,0,0,0,0 2,0,0,-2,-1  3,1,0,-3,-3 : : となるようなプログラムを書き、結果を出力したいのですが、よく分かりません。 ちなみにawkで書いて実行すると、 (プログラム名はtest.awkとする) BEGIN{ i=0; } { while(i<1){ v3 = $4; v4 = $5; i++; } print $1,$2,$3,($4 - v3),($5 - v4); } 実行するプログラム↓ awk -f test.awk test.txt という感じなのですが…。 これを上述の様に、C言語でプログラムを書いて、 実行するには、例えばどのようなプログラムを書けば いいのでしょうか? なにぶん初心者のため、分からない事だらけですが、 よろしくお願いしますm(__)m

  • C言語でテキストファイル(.dat)からaviファイルなどを検索・再生

    はじめまして。 プログラミング初心者です。 C言語を用いて、テキストファイル(.dat)に動画(aviファイル等)の情報を書き込み、利用者が見たい動画をキーワードで検索すると再生させることは可能でしょうか? プログラミング初心者で質問の内容で至らないことがあるかと思いますが、分かる方がいたら教えてください。 お願いします。

専門家に質問してみよう