- ベストアンサー
ファイルの内容を変換するインタプリタ?
ファイルの内容を変換する簡単なプログラムを作りたいのですが、 CやVBなどコンパイル環境がありません。 何かいい方法はないでしょうか。 フリーかシェアウェアのインタプリタとか。 OSはWindwos XPです。 目的は、 htmlファイル内の料金を税込みに変換したい。 htmlファイルは1000ファイルある。 プログラムはこんな感じです。 ファイルを開く LOOP: 1文字読む。EOFならファイルを閉じる。 もし、文字が \(円マーク)なら --次の4文字を数字に変換 --数字を1.05倍する。 --ファイルに書く 違ったら --ファイルに書く goto LOOP このプログラムをさらに、UNIXみたいに、 foreach file (*) --プログラム.exe $file end のような感じにしたいのです。 どうぞよろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
最近はRubyを触っていないので良い処理方法をイメージできませんが、 以下のスクリプトが参考になれば幸いです。 ・スクリプト・ファイルのみ(HTML不要)で実行の結果を見れます。 (他のファイルを参照しない。) ・以下のスクリプト部分をコピーして全角空白を半角空白2個に置き換え、 適当な名前で保存してください。 ### スクリプト ここから ###################################### #!ruby -Ks # 価格らしき数字を税込みに変更 # 数値を貨幣単位に変更 def toMonyUnit(digStr, yen = true) n = "" digStr.gsub!(/./){ |m| n = m + n "" } n.gsub!(/\d{3}/, '\0,') n.gsub!(/./){ |m| digStr = m + digStr "" } if yen "\\" + digStr else digStr end end html = DATA.read puts "**** 置き換えする前 ****" print html puts "\n**** 置き換えした後 ****" print html.gsub(/\\([,\d]+)/){ |m| toMonyUnit(sprintf("%\d", $1.gsub(/,/, "").to_i * 1.05)) } __END__ <html><head><title>TEST</title> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> </head><body> <table> <tr><td>商品A:</td><td>\4,650</td></tr> <tr><td>商品B:</td><td>\42,980</td></tr> </table> </body></html> ### スクリプト ここまで ######################################
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17070)
#3です。エクセルVBAで。ツール-マクロ-VBEの画面で 挿入-標準モジュールにコピペし実行(F5キー)。 Sub test01() Open "c:\my documents\tst1.html" For Input As #1 While Not EOF(1) Line Input #1, a p = InStr(a, "\") If p <> 0 Then MsgBox a s = "" For i = p + 1 To p + 10 b = Mid(a, i, 1) c = Asc(b) If (c < 58 And c > 47) Then s = s & b ElseIf c = 44 Then Else GoTo p01 End If Next i p01: MsgBox s zeikomi = Val(s) * 1.05 MsgBox zeikomi e = Format(zeikomi, "###,###") MsgBox e s = Mid(a, 1, p - 1) & "\" & e & Mid(a, i, Len(a) - i) MsgBox s End If Wend Close #1 End Sub Msgboxはテスト確認用です。納得後削除する。 #5のご回答の例でテスト済み。 1レコードに金額1つしかないと仮定。 金額9桁(,含む)以内と仮定。
お礼
VBAでもいろいろできるんですね! 貴重なお時間をお使い頂きまして、申し訳ないような気持ちです。ありがとうございました。
- Bo_Bo
- ベストアンサー率65% (97/149)
Ruby はいかかですか。 日本人が開発している、フリーのオブジェクト指向スクリプト言語です。 内容的には、Perlのオブジェクト指向版と理解してください。 ** 簡単な例 *************************** #!ruby -Ks # カレント以下のHTMLから、金額表記らしき数字のある行を出力 # Shift-JIS 限定 Dir.glob("**/*.html").each{ |f| open(f) do |html| while line = html.gets puts line if line =~ /\\[,\d]+/ end end } *************************************** 【注意】インデントに全角空白を使用 ●Windows では、以下のものをダウンロードします。 mswin32版 Ruby 1.8.1 http://www.dm4lab.to/~usa/ruby/ Release版の ・ruby-1.8.1-i386-mswin32.zip (3,764KB) ← 【これをダウンロード】 ruby 1.8.1 (2003-12-25) [i386-mswin32] md5sum : 6bbdabeb29f1a15fa69901e87d1108ac ●導入方法やマニュアルは、本家 Ruby のサイトを参照してください。 http://www.ruby-lang.org/ja/
お礼
「Ruby」という言語を始めて知りました。 まさにこういうテキスト処理が得意のWindwosで動くインタプリタ言語を求めていました。 でもPerlと比べると、文法にちょっとクセがありそうな感じですね。 少しずつ勉強してみます。ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17070)
エクセルは使える環境でしょうね。であればエクセルVBAのコードを書いて、実行して、質問の処理が出来ると思う。 早朝でコードを書く時間が無いが、そう複雑ではない見こみ。 それより1000あるファイルの、命名に規則性がありますか。自動的に次々ファイルを開くためには、フログラムでファイル名を、自動生成できるケースですと、プログラムが簡単になって良いのですが。 それと蛇足ですが、「インタプリタ」の用語の使い方に違和感を覚えます。
お礼
ありがとうございました。
- notnot
- ベストアンサー率47% (4901/10362)
>ファイルの内容を変換する簡単なプログラムを作りたいのですが、 >CやVBなどコンパイル環境がありません。 ということなので、CもVBもできないのでプログラムを教えて欲しいと言う質問ではないんですよね? Cが得意なら下記URLにフリーのCコンパイラがあります。VB系が得意なら標準搭載されているVBS+WSHがいいでしょう。同じくJavaScript+WSHというのもあります。 WSHというキーワードで検索すれば解説ページがたくさんあります。 繰り返しは、VBS+WSHでも出来ますが、バッチファイル(~.BAT)で書くほうが楽でしょう。 for %%F in (*) do cscript program.vbs < %%F > %%F.OUT とか。
お礼
おぉっ!Borland Cが無料に!! WSHはバッチファイルみたいなものという認識しかありませんでしたが、VBSやJaveScriptと一緒に使えるとは! おおっ!しかもバッチファイルでこんなことができるとは・・・すっかり忘れていました。 もう一度勉強します。WSHは一から勉強します。 ありがとうございました。
- kiriku
- ベストアンサー率41% (195/468)
WSHとかスクリプトでできそうですが、秀丸などのマクロでもできるんじゃないでしょうか? それにしても、もう3/29なのに今から対応ですか。ご苦労さまです。
お礼
ええっ!? あっ、一ヶ月間違えてた! 大変だこりゃ。
お礼
貴重なお時間を使って頂きまして、恐縮です。 ありがとうございました。