
/*
В этой версии скрипт формирует файл DgenCampaignList.csv в каталоге Dgen.
Открыть его можно из проводника. 
Свое расположение задается в переменной OutFile в районе стр. 30
Для запуска редактора таблиц посмотрите переменную TextEditor ниже.
*/


/*
Создание списка динамических кампаний.
Скрипт просматривает все файлы campaignXXXX*.dat и формирует список Наименование кампании;ИмяФайла.
Выходной файл имеет расширение csv в кодировке 1251 и разделителем ";", располагается в каталоге Dgen.
Для дальнейшей обработки может запускаеться программа заданная переменной TextEditor.

Использование:
	DgenCampaignList.js
*/


//var TextEditor="WordPad"	//для вызова другой программы
//var TextEditor="scalc"		//Открыть scalc
//var TextEditor="excel"		//открыть Excel
var TextEditor=""			//не открывать файл, т.е. позже надо открыть его из Проводника вручную.

//var TextEditor="%comspec% /c "	//открыть программой по умолчанию 


//здесь можно указать собственное расположение файла результата. 
//Например: 
//var OutFile="..\DgenCampaignList.csv"	//сформировать в корне IL-a

var OutFile =  "DgenCampaignList.csv"	//сформировать в каталоге DGen


//Ниже можно ничего не трогать без нужды.

var campList = new Array
var fso = new ActiveXObject("Scripting.FileSystemObject"),
	fo = fso.CreateTextFile(OutFile, true, false);



//================================================================
//для удобстава обработки строк:
String.prototype.trimRight=function() 		// убирает все пробелы в конце строки
{
  return this.replace(/\s+$/,'');
}

String.prototype.trimLeft=function() 		// убирает все пробелы в начале строки
{
  return this.replace(/^\s+/,'');
}

String.prototype.trim=function()	 		// убирает все пробелы в начале и в конце строки
{
  return this.trimRight().trimLeft();
}
//================================================================


main()

function main(){
//предполагаем, что скрипт находится в каталоге Dgen	
	var WS = WScript.CreateObject("WScript.Shell"),
		Directory = WS.CurrentDirectory				//текущий каталог (Dgen)
	

	res=GetFileList(Directory, "campaign*.dat", true)
//	WScript.Echo(res);
	
	
	for (f in res){
	    mm=res[f]
	    procDatFile(mm.substring(0,mm.length-1))
	}
	
	campList.sort()
	for (var i in campList){
		fo.WriteLine(campList[i])
	}
	fo.close()

	if (TextEditor.length > 0)
		showFile(OutFile)
}

function procDatFile(fil){
    FSO = WScript.CreateObject("Scripting.FileSystemObject"),
	f = fso.OpenTextFile(fil, 1, false);
	campList[campList.length] = fil+';'+f.ReadLine().trim()
	f.Close()
}


function GetFileList(Directory, Extension, Deep)
{
    var
        FSO = WScript.CreateObject("Scripting.FileSystemObject"),
        WshShell = WScript.CreateObject("WScript.Shell"),
        LastCurrentDirectory = WshShell.CurrentDirectory;

// Проверка необязательных параметров Extension, Deep
        !Extension || Extension=="" ? Extension = "": null;
        Deep? Deep = "/S": Deep = "";
        
//	WScript.Echo(Directory);
	
// Преобразуем исходнный Directory в короткий путь
        Directory = FSO.GetFolder(Directory).ShortPath;
        
    var    
        Result = [],
        Command, 
        TempPath = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\\", // Путь к папке %TEMP%
        TempBuffer = TempPath + (new Date()).valueOf().toString().substring(6)+".txt";
        
        // Ведем поиск средствами CMD. 
        Command = "cmd.exe /c chcp 1251 && cmd.exe /c && dir /B "+Deep+" /A:-D "+ Extension+ " > "+TempBuffer;
	
        // Устанавливаем директорию по умолчанию
        WshShell.CurrentDirectory = Directory;

        // Запустим CMD, ждем окончание выполнения этого процесса
        WshShell.Run(Command, 0, true);

    var 
		Stream = FSO.OpenTextFile(TempBuffer, 1, false);
		Stream.AtEndOfStream ?	Result="" : Result = Stream.ReadAll();
        Stream.Close();
        
        FSO.DeleteFile (TempBuffer);
        Result = Result.split("\n");
        Result.length -= 1;
        WshShell.CurrentDirectory = LastCurrentDirectory;
    return Result;
}


function showFile(ofil){
	var oShell = WScript.CreateObject("WScript.Shell");
	oShell.Run(TextEditor+' "' +ofil+'"',1,-1);
}

