![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# c言語でイベントフラグを使った制御をしたいんですけど set_flg(FLG,0x01) で設定した 1 2023/08/08 13:18
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- フリーソフト テキストファイルの一括置換で除外したい文字があります。 2 2022/06/21 17:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
-
4
同時にファイル読み込み 書き込み
C言語・C++・C#
-
5
ファイルの途中に文字列を挿入
C言語・C++・C#
-
6
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
7
同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか?
C言語・C++・C#
-
8
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
9
C言語でファイルから特定の文字を抽出
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipse 改行後のタブ
-
各項目がダブルクォーテーショ...
-
エクセル VBA 複数条件一...
-
csvデータ ダブルクォーテ...
-
秀丸で数字だけの行を削除したい
-
テキストファイル中の文字列の置換
-
スペースで区切られた氏名から...
-
C言語でテキストファイルの内容...
-
VBA 置換文字がみつからない時
-
テキストボックスの文字列を置...
-
PerlでUTF-8のファイルの文字列...
-
VBscriptで「改行」と「"」を置...
-
word オートシェイプ内も一括変換
-
cshの文字列置換
-
複数のパワーポイントファイル...
-
置換した文字色の変更
-
PowerShellでテキストの空白行...
-
C#で空白行を削除する方法
-
○文字目に文字挿入
-
EXCELマクロを用いてグラフの系...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GoogleAppsScript文字列置換の...
-
VBA 置換文字がみつからない時
-
各項目がダブルクォーテーショ...
-
正規表現で、特定の文字列を含...
-
csvデータ ダブルクォーテ...
-
EXCEL警告「置換対象のデータが...
-
EXCEL VBA でCTRL+Fのダイア...
-
C言語でテキストファイルの内容...
-
スペースで区切られた氏名から...
-
csvデータのダブルクォーテーシ...
-
PowerShellでテキストの空白行...
-
\\(円)記号を置換したい
-
C#で空白行を削除する方法
-
【Excel VBA】文字列の置換作業...
-
python 大文字小文字を区別しな...
-
テキストファイル中の文字列の置換
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
ダブルコーテーション 、"を二...
-
○文字目に文字挿入
おすすめ情報