使用しているソフトウェア(スタンドアロンのアプリケーション)から
出力されるログデータの処理を行っています。
CSVのデータは
00:00:00,23.1
のように1つ目の項目に時刻、2つ目の項目に値が入っています。
行数は都度変わります。(60行であったり、100行であったり)
この出力されたCSVデータでExcelのAVERAGE関数を使って
値列の平均を求めていますが、これを自動作業で行おうとした場合、
どのような手段で行うのがよいでしょうか?マクロ?VB.NETで自作ソフト?
OSはWindows7、Officeは2010を使用しています。
おすすめがありましたら教えて頂けると嬉しいです。
以下の内容を「average.jse」という名前のファイルに保存してください。
あとはaverage.jseのアイコンに、集計したいデータが入ったcsvファイルをドラッグ&ドロップすると平均を算出してメッセージボックスで表示してくれます。
メッセージボックスが表示されているときにCtrl+Cを押すことで、クリップボードにメッセージ内容を取得することができます。
var fso = new ActiveXObject("Scripting.FileSystemObject"); var oWArgv = WScript.Arguments; if (oWArgv.length == 0) { WScript.Echo("drag & drop file"); WScript.Quit(); } var path = oWArgv.item(0); sum = 0; cnt = 0; var ts = fso.OpenTextFile(path); while (!ts.AtEndOfStream) { var line = ts.ReadLine(); sum += Number(line.split(",")[1]); cnt += 1; } ts.Close(); WScript.Echo(sum / cnt);
文字列処理に特化した処理系を使って良いのなら、
AWK等を覚えると良いと思います。
http://www.vector.co.jp/soft/win95/util/se376460.html
次のような感じで処理できます。
gawk "BEGIN{FS=\",\"}(/[0-9]/){sum=sum+$2;line=line+1}END{print sum/line}" log.csv
さらにこの結果を取り込んで高度な加工をしたい場合にはAWKの処理部分をファイルで記述することにより、ログの処理程度でしたらほとんどの事が可能です。
Windowsの流儀と異なるかもしれませんが、AWKは枯れていて仕様変更はありませんので、一度覚えるとずっとその知識が使えます。バージョンアップなどで新技術に振り回されるような事が無いです。
やはりWindowsですのであくまでExcel等をメインに仕様変化について行きつつ、変化が無くて長持ちする処理系も覚えておくといざという時に便利かと思います。
2名の方ご回答ありがとうございました。
AWKをここで調べてみることになったのも貴重でしたし、
ソースコードまで記載いただくのもありがたかったです。
ベストアンサーについては悩みましたが、Windows環境ですぐ実行
可能な方へさせていただきましたが、どちらもありがたかったです。
ありがとうございました。