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

ファイルの内容を変換する簡単なプログラムを作りたいのですが、
CやVBなどコンパイル環境がありません。
何かいい方法はないでしょうか。
フリーかシェアウェアのインタプリタとか。
OSはWindwos XPです。

目的は、
htmlファイル内の料金を税込みに変換したい。
htmlファイルは1000ファイルある。

プログラムはこんな感じです。

ファイルを開く
LOOP:

1文字読む。EOFならファイルを閉じる。

もし、文字が \(円マーク)なら
--次の4文字を数字に変換
--数字を1.05倍する。
--ファイルに書く
違ったら
--ファイルに書く

goto LOOP

このプログラムをさらに、UNIXみたいに、

foreach file (*)
--プログラム.exe $file
end

のような感じにしたいのです。

どうぞよろしくお願い致します。

A 回答 (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>
### スクリプト ここまで ######################################
    • good
    • 0
この回答へのお礼

貴重なお時間を使って頂きまして、恐縮です。
ありがとうございました。

お礼日時:2004/03/30 14:26

#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桁(,含む)以内と仮定。
    • good
    • 0
この回答へのお礼

VBAでもいろいろできるんですね!
貴重なお時間をお使い頂きまして、申し訳ないような気持ちです。ありがとうございました。

お礼日時:2004/03/30 14:29

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/

参考URL:http://www.dm4lab.to/~usa/ruby/, http://www.ruby-lang.org/ja/
    • good
    • 0
この回答へのお礼

「Ruby」という言語を始めて知りました。
まさにこういうテキスト処理が得意のWindwosで動くインタプリタ言語を求めていました。

でもPerlと比べると、文法にちょっとクセがありそうな感じですね。
少しずつ勉強してみます。ありがとうございました。

お礼日時:2004/03/29 14:31

エクセルは使える環境でしょうね。

であればエクセルVBAのコードを書いて、実行して、質問の処理が出来ると思う。
早朝でコードを書く時間が無いが、そう複雑ではない見こみ。
それより1000あるファイルの、命名に規則性がありますか。自動的に次々ファイルを開くためには、フログラムでファイル名を、自動生成できるケースですと、プログラムが簡単になって良いのですが。
それと蛇足ですが、「インタプリタ」の用語の使い方に違和感を覚えます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/03/29 14:16

>ファイルの内容を変換する簡単なプログラムを作りたいのですが、


>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
とか。

参考URL:http://www.borland.co.jp/cppbuilder/freecompiler/
    • good
    • 0
この回答へのお礼

おぉっ!Borland Cが無料に!!
WSHはバッチファイルみたいなものという認識しかありませんでしたが、VBSやJaveScriptと一緒に使えるとは!

おおっ!しかもバッチファイルでこんなことができるとは・・・すっかり忘れていました。

もう一度勉強します。WSHは一から勉強します。
ありがとうございました。

お礼日時:2004/03/29 14:14

WSHとかスクリプトでできそうですが、秀丸などのマクロでもできるんじゃないでしょうか?



それにしても、もう3/29なのに今から対応ですか。ご苦労さまです。
    • good
    • 0
この回答へのお礼

ええっ!? あっ、一ヶ月間違えてた!
大変だこりゃ。

お礼日時:2004/03/29 14:06

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