/*********************************************************************
* PV Sum version 0.0
* 使い方:集計対象csvを格納したフォルダをドラッグ&ドロップする。
*
* ・指定できるフォルダは1フォルダのみ
* ・対象フォルダ内に入れられたファイルに対してのみ処理が走る
* ・csvファイルの形式チェックは未実装
* ・ソート機能は未実装
* ・結果ファイルの出力先は対象フォルダと同階層のフォルダ
*********************************************************************/
var f, fw, line, ls;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = new ActiveXObject("Scripting.Dictionary");
var objParm = WScript.arguments;
line = 1;
try
{
// 複数フォルダには未対応
if(objParm.length!=1)
{
var emsg = "";
objParm.length==0 ? emsg="対象が指定されていません。" : emsg="複数フォルダには対応していません。";
throw new Error(emsg);
}
var folder = fso.GetFolder(objParm(0));
var em = new Enumerator(folder.Files);
var w, k, s, ss;
for(em.moveFirst(); !em.atEnd(); em.moveNext())
{
// 読み取り専用でファイルオープン
f = fso.OpenTextFile(em.item().Path, 1);
// 6行目まで読み飛ばし
for(line=1; line<=6; line++)
{
f.SkipLine();
}
// PV集計
for(; line<=26; line++)
{
// 1行読込
s = f.ReadLine();
// 20件ない場合も考え得るのでbreak措置
if(s=="※上位20件を表示しております。,")
{
break;
}
// 辞書に格納
ss = s.split(",");
if(d.Exists(ss[1]))
{
// Keyが存在する場合
// PV値を加算
d.Item(ss[1]) = parseInt(d.Item(ss[1])) + parseInt(ss[5]);
}
else
{
// Keyが存在しない場合
// 辞書に追加
d.add(ss[1],parseInt(ss[5]));
}
}
}
//WScript.echo(d.Count);
w = d.Keys().toArray();
k = d.Items().toArray();
// 上書きモードでファイルオープン
fw = fso.CreateTextFile(folder.ParentFolder + "\\output_" + folder.Name + ".csv", true);
// 書き込み
fw.WriteLine("ページ名,PV数");
for(i in w)
{
fw.WriteLine(w[i] + "," + k[i]);
}
}
catch(e)
{
// エラーを表示
WScript.echo(e.message);
}
finally
{
// ファイルクローズ
if(f!=null)
{
f.Close();
}
if(fw!=null)
{
fw.Close();
}
// オブジェクトの開放
objParm = null;
fso = null;
d = null;
f = null;
fw = null;
WScript.echo("終了");
}