• ベストアンサー

ファイルの内容を変換するインタプリタ?

ファイルの内容を変換する簡単なプログラムを作りたいのですが、 CやVBなどコンパイル環境がありません。 何かいい方法はないでしょうか。 フリーかシェアウェアのインタプリタとか。 OSはWindwos XPです。 目的は、 htmlファイル内の料金を税込みに変換したい。 htmlファイルは1000ファイルある。 プログラムはこんな感じです。 ファイルを開く LOOP: 1文字読む。EOFならファイルを閉じる。 もし、文字が \(円マーク)なら --次の4文字を数字に変換 --数字を1.05倍する。 --ファイルに書く 違ったら --ファイルに書く goto LOOP このプログラムをさらに、UNIXみたいに、 foreach file (*) --プログラム.exe $file end のような感じにしたいのです。 どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.5

最近は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> ### スクリプト ここまで ######################################

mas0400
質問者

お礼

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

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#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桁(,含む)以内と仮定。

mas0400
質問者

お礼

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

  • Bo_Bo
  • ベストアンサー率65% (97/149)
回答No.4

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/
mas0400
質問者

お礼

「Ruby」という言語を始めて知りました。 まさにこういうテキスト処理が得意のWindwosで動くインタプリタ言語を求めていました。 でもPerlと比べると、文法にちょっとクセがありそうな感じですね。 少しずつ勉強してみます。ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

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

mas0400
質問者

お礼

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

  • notnot
  • ベストアンサー率47% (4845/10255)
回答No.2

>ファイルの内容を変換する簡単なプログラムを作りたいのですが、 >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/
mas0400
質問者

お礼

おぉっ!Borland Cが無料に!! WSHはバッチファイルみたいなものという認識しかありませんでしたが、VBSやJaveScriptと一緒に使えるとは! おおっ!しかもバッチファイルでこんなことができるとは・・・すっかり忘れていました。 もう一度勉強します。WSHは一から勉強します。 ありがとうございました。

  • kiriku
  • ベストアンサー率41% (195/468)
回答No.1

WSHとかスクリプトでできそうですが、秀丸などのマクロでもできるんじゃないでしょうか? それにしても、もう3/29なのに今から対応ですか。ご苦労さまです。

mas0400
質問者

お礼

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

関連するQ&A

  • ファイル内容を変換後に別フォルダへコピーしたい

    エクセルVBAにて 下記フォルダ状況となっている場合に C\元データ\複数のtxtファイル C\変換後データ 元のデータ内にあるtxtファイルの中身を変換し Open strFileName For Input As #intFF Do Until EOF(intFF)   Line Input #intFF, strREC GYO = GYO + 1 Cells(GYO, 1).Value = 付け加えたい文字 + strREC Loop 変換したファイルを C\変換後データへコピーしたいのですが どのようししたらよろしいのでしょうか? コピーしたファイル名は元のファイル名と同じにしたいです。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • ファイルからの変換

    c言語初心者です。 あらかじめファイルを作っておいて その中に小文字でvffjfと入れておきます。 それを読み取り大文字に変えファイルに表示させるプログラムをつくりたいのですが、 toupperの使い方や、変換させてまた再度入力させるには どのようなものが必要ですか?

  • csvファイルからの変換

    csvファイルに20030627と、テキストで数字が入っています。 これをExcelファイルに変換すると、形式が日付にならないので、2003/06/27となるようにしたいのですが(文字列ではなく)、簡単にはいきません。 いい変換方法はないでしょうか。

  • バッチファイルのIF分岐にて任意の文字を入力しておきたい

    バッチファイルのIF分岐にて任意の文字を入力しておきたいです。 下記のようなバッチファイルを作成し、「1」を入力すると「:AAA」のラベル に飛びメッセージが表示されるようにしています。 最初から「1」が自動で入力されているような状況にすることはできますでしょうか? 「set NUM=1」にしておけば、Enterを押すだけで「1」が入力されている のはわかったのですが、DOS上に「1」が表示されていません。 入力待ちの際に「1」が入力されている状況を作りたいと思っています。 Windows XP 32bitで動作させたいです。 お手数ですが知識をお借りしたいと思います。 もしくは「ここを見ろ」というのをご教授ください。 -------------------------------------------------- @echo off :LOOP set NUM= cls echo. echo "1. AAA" echo "2. BBB" echo "0. 終了" echo. echo. set /p NUM="番号を入力してください >" if %NUM% == 1 goto :AAA if %NUM% == 2 goto :BBB if %NUM% == 0 goto :owari echo 番号がありません echo. pause goto :LOOP :AAA echo "AAAです" echo. pause goto :LOOP :BBB echo "BBBです" echo. pause goto :LOOP :owari echo 終了します echo. pause goto :eof --------------------------------------------------

  • バッチファイルで悩んでいます。

    プログラミング初心者です。 御教授の程、宜しくお願いします。 以下のプログラムは 1.ユーザーからフォルダをドラッグ・アンド・ドロップしてもらう。 2.ユーザーに日付を入力してもらう(yyyymmdd方式) 3.ユーザーに下記の2つから選んでもらう。   1.入力した日付よりも前に更新されたファイルを表示   2.入力した日付よりも後に更新されたファイルを表示 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 ------------------------------------------- list.bat echo off set /P YYYYMMDD=日付を入力してください(YYYYMMDD): :loop echo ---------------------------------------------------- echo 入力した日付よりも前に更新されたファイルを表示 - [1] echo 入力した日付よりも後に更新されたファイルを表示 - [2] echo ---------------------------------------------------- set /P chk= 1 か 2 を入力してください: if not defined chk goto loop if %chk% EQU 1 set op=LSS&goto listup if %chk% EQU 2 set op=GTR&goto listup goto loop :listup echo. for /R %1 %%F in ( *.* ) do call :sub "%%~fnxF" %%~tF cmd /k :sub set fdate=%2 set fdate=%fdate:/=% if %fdate% %op% %YYYYMMDD% echo %2 %3 %1 goto :EOF このプログラムに関しまして、 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 をコマンドプロンプト上にではなく、エクセルファイル上に変更したいです。 教えて頂きますと助かります。 それでは、宜しくお願い致します。

  • ファイル名が変換されてしまう?

    使用OSはXPのProでservicePack1です。 ファイルやフォルダを別の場所に移動やコピーをすると名前がが勝手に 小文字から大文字に変換されてしまいます。 ただ全てが変換されてしまうわけではなくファイルは "-"や"_"等の記号や数字がが含まれている場合のみです。 フォルダは関係なく全て変換されてしまいます。 原因が分からず困っています。 どうにか直す方法は無いでしょうか?

  • UNIX上で文字コードの一括変換はできますか?

    UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、Perlでもなんでも結構です。よろしくお願いします。

  • 独自コード変換方法について

    UNIX-Cにて独自でファイルから読みこんだ文字をSJIS→JISまたはJIS→SJISに変換する関数を作成したいのですがどのように作成すべきか全く検討がつきません。 色々なHPも探してみたのですが変換プログラムの紹介やコマンド(nfk)などの使い方などがほとんどで・・・。 何か参考になるHPをお知りのかた、または簡単に作成できるヒントを下さればと思います。 よろしくお願いします。

  • 大文字を小文字に変換するプログラム

    if((fp4 = fopen("sample.txt","r")) == NULL){ printf("can't open\n"); return(-1);//強制終了 } else{ while((c=fgetc(fp4))!=EOF){/*EOFまでfp4に入力*/ if(isupper(c)){ c=tolower(c); printf("%s",c); } else printf("a"); //確認用 } } ファイルから文字を読み込んでctype関数を使って大文字から小文字に変換したいんですがうまくいきません。 コンパイルしても確認用が反応しないんでおそらくどこか間違ってると思うんですがわかりません。 ご教授宜しくお願いします。

専門家に質問してみよう