
A 回答 (3件)
- 最新から表示
- 回答順に表示
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
No.1
- 回答日時:
ファイルから文字列を1行読み込む
読み込んだ文字列の頭から"FLG=0"を探す
→ポインタを1文字づつ後ろにずらしていってstrcmpなどを使う
見つかったら文字列を書き換える
→0を1にするだけなら、(ptr+4)の位置に'1'を格納する
文字列1行をファイルに書き出す
ではダメなのですか?
本当は置換の条件が複雑なのでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントの色を保持したままセ...
-
AppleScriptファイルの読み書き...
-
パワーポイントの一括置換:複...
-
○文字目に文字挿入
-
VBA 置換文字がみつからない時
-
秀丸マクロ ファイル名変更
-
秀丸エディタで、「-」や「ー」...
-
C#で空白行を削除する方法
-
正規表現 特定の文字列を含む行...
-
csvデータのダブルクォーテーシ...
-
住所編集のマクロを組んでいて...
-
テキストデータの解析
-
c++で積分のプログラムを実行し...
-
EXCELマクロを用いてグラフの系...
-
スペースで区切られた氏名から...
-
word VBA 改ページの繰り返しに...
-
xmlファイル内の文字列置換
-
複数のパワーポイントファイル...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現で、特定の文字列を含...
-
csvデータのダブルクォーテーシ...
-
各項目がダブルクォーテーショ...
-
VBA 置換文字がみつからない時
-
秀丸エディタで、「-」や「ー」...
-
C言語でテキストファイルの内容...
-
csvデータ ダブルクォーテ...
-
C#で空白行を削除する方法
-
Excel・ユーザーフォームの情報...
-
xmlファイル内の文字列置換
-
フォントの色を保持したままセ...
-
正規表現 特定の文字列を含む行...
-
○文字目に文字挿入
-
複数のパワーポイントファイル...
-
スペースで区切られた氏名から...
-
3回以上の改行を2回にする正...
-
Eclipse 改行後のタブ
-
EXCEL VBA でCTRL+Fのダイア...
-
word VBA 改ページの繰り返しに...
-
MKエディタやサクラエディタを...
おすすめ情報