/********************************************************************* * 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("終了"); }