プロが教えるわが家の防犯対策術!

失礼します。

ひとつのフォルダ内に複数のテキストファイルがあります。
それらのテキストの中に書かれている内容を一括して置き換えたいのです。

例:
AAA = 150



AAA = 0

に、というものなのですが、
ここで2点、問題があるのです。

1点は、置き換えたい元の
AAA = 150
これは例として150と書かせてもらいました。
実際は100以上の数値なら何でも、0に書き換えたいというものなのです。

2点目は
AAA = 150
ではなく、
AAAと、=と、150の間の2つの半角スペースが
tabキーを押して入力される空白のものが使われているテキストが混在している事です。

上記の書き換え作業を既存のソフトウェアに頼らず、という事であれば、
どのようなプログラムを作るものなのでしょうか。

私まずこの部分から知識がないもので。
プログラムも色々なものあると聞きまして。

もし出来ましたら
上記のようなものだとこのようになる、といった具体的な記述など、
書いて見せて頂ければ有難いです。

失礼します。

A 回答 (4件)

>プログラムも色々なものあると聞きまして。


>もし出来ましたら
>上記のようなものだとこのようになる、といった具体的な記述など、
>書いて見せて頂ければ有難いです。

以下のようなアルゴリズムになる。

1.読み込みたいファイルをリードモードで開く
2.結果ファイルを新規作成モードで開く
3.入力ファイルから1行読み込む。入力が尽きたら10.へ
4.読み込んだ行の先頭3文字が「AAA」か調べる。違うなら9.へ
5.行の4文字目以降「=」が現われるまで、タブとスペースを読み飛ばす。タブもスペースも「=」も現われなかったら9.へ
6.「=」の次から、タブとスペースを読み飛ばす。
7.タブでもスペースでもない文字が現われたら、そこ以降の文字列を「数値に変換」してみる。変換できなかったら9.へ
8.変換した結果、100以上で、かつ、後ろに文字が残っていないなら「AAA = 0」を結果ファイルに出力して3.から繰り返し
9.入力した行をそのまま結果ファイルに出力して3.から繰り返し
10.入力ファイルと結果ファイルを閉じる
11.入力ファイルを削除して、結果ファイルを入力ファイルの名前にリネームする

あとは「使用する言語に合わせて、アルゴリズム通りに書くだけ」です。
    • good
    • 0
この回答へのお礼

具体例を書いていただき大変助かります。
参考にさせていただきます。

お礼日時:2012/08/27 08:56

既存のソフトウェアに頼らずって、アセンブラもコンパイラも使わないんです?


機械語で基本的な入出力から作ることになりますが‥‥。
揚げ足を取ってるのではなく、杓子定規に解釈するとそうなる、と言ってます。
質問者さんの要求がいまひとつ理解できません。

既存のソフトウェアを頼っていいならsedを使えば1行で済みますね。
sed /AAA[ \t]=[ \t][1-9][0-9][0-9][0-9]*/AAA = 0/

正規表現が使えるテキストエディタでも同様に可能です。
    • good
    • 0
この回答へのお礼

sedですか、かなり取っ掛かりになる部分ができました。
大変ありがとうございます。

お礼日時:2012/08/27 08:55

テキストファイルの置換ならテキストエディタを使うのが一番。


例えば無料で使えるEmEditor Freeを使って画像のような置換処理をすれば一発終了。
プログラムを作る必要なんてない。

参考URL:http://jp.emeditor.com/modules/download2/rewrite …
「テキスト書き換えのプログラム」の回答画像3
    • good
    • 0

「既存のソフトウェアに頼らず」というのは確かにどう解釈していいか悩むところです。


とはいえ、ここはとりあえず極めて身勝手に
汎用のプログラミング言語ならたとえOS標準のものでなくとも「既存のソフトウェア」ではない(といってもこれもかなりあいまいではありますが)
と解釈させていただき、
Windows XP において なでしこ(1.5332) で書いた例を示します。

###ここから###
対象フォルダはマイドキュメントでフォルダ選択
対象ファイル群は対象フォルダ&「*.txt」のファイル列挙
もし(対象ファイル群の配列要素数)が0ならば
  終わる

エラー監視
エラーならば
  もし書込ハンドル<>「」ならば
    書込ハンドルをファイルストリーム閉じる
  エラーメッセージを言う
  終わる

書込ハンドルは「」
対象ファイル群で反復
  対象ファイルは対象フォルダ&それ
  対象一時ファイルは対象フォルダで対象ファイルのユニークファイル名生成
  書込ハンドルは対象一時ファイルを「書」でファイルストリーム開く。  
  対象ファイルを毎行読んで反復
    一行はそれ
    もし一行が「AAA[ {タブ}]=[ {タブ}][1-9]##*」にワイルドカード一致ならば
      一行の「[1-9]##*」を「0」にワイルドカード置換して一行に代入
    書込ハンドルで一行&改行をファイルストリーム書く
  書込ハンドルをファイルストリーム閉じる
  書込ハンドルは「」
  対象ファイルを(対象ファイルを「.bak」に拡張子変更)にファイル名変更
  対象一時ファイルを対象ファイルにファイル名変更
終わる
###ここまで###

念のため使用時の注意点を書きますが、テキストファイルと同じファイル名で拡張子が.bakのファイルがあると、上書きされます。また、元のファイルの最後の行に改行がない場合置換後のファイルには改行が付加されます。

参考URL:http://nadesi.com/
    • good
    • 0
この回答へのお礼

具体的かつ簡潔に書いていただきどうもありがとうございます。

これでやっていきたいと思います。

大変どうもありがとうございました。

お礼日時:2012/08/27 08:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!