Андрей Попов - Windows Script Host для Windows 2000/XP
Рис. 5.14. Содержимое записной книжки (сортировка по фамилии)
Запускной функцией в SortName.js является функция Main():
function Main() {
 //Создаем объект WshShell
В WshShell = WScript.CreateObject("WScript.Shell");
 //Определяем пути к файлам
В InitPath();
 //Создаем объект FileSystemObject
В FSO=WScript.CreateObject("Scripting.FileSystemObject");
 //Открываем выходной файл для записи
В FOut=FSO.OpenTextFile(PathOut,ForWriting,true);
 //Печатаем заголовок отчета
 TopReport("Сортировка по фамилии");
 //Выводим содержимого файла с данными
В ListFile();
 //Печатаем итоговую информацию
В BottomReport();
 //Открываем выходной файл в Блокноте
В MakeOut();
}
Ртак, основная работа РїРѕ формированию выходного файла, который затем будет открыт РІ Блокноте, производится РІ функции ListFile(). Р’ СЃРІРѕСЋ очередь, РІ этой функции вызываются функции FileToArray() Рё ListPersonArray().
function ListFile() {
 //Считывание данных из файла в массив
В FileToArray();
 //Запись информации из массива в выходной файл
В ListPersonArray();
}
Опишем сначала функцию FileToArray(). Здесь производится создание массива PersonArr, чтение в цикле while строк из файла book.txt (с помощью метода ReadLine) и формирование массива ss (с помощью метода split), элементы которого содержат данные для текущей записи. После этого вызывается функция PersonToArray() для создания нового элемента массива PersonArr:
function FileToArray() {
var s,ss;
 //Открываем файл с данными для чтения
В FBook=FSO.OpenTextFile(PathBook,ForReading,true);
 //Создаем массив PersonArr
В PersonArr=new Array();В
 //Читаем содержимое файла FBook
В while (!FBook.AtEndOfStream) {
 //Считываем строку
В s=FBook.ReadLine();
 //Записываем содержимое строки s в массив ss
В ss = s.split("|");
 //Добавляем новый элемент в массив объектов Person
В PersonToArray(ss);
В }
 //Закрываем файл
В FBook.Close();
}
В функции PersonToArray(sArr) из элементов массива sArr формируется экземпляр PersonRec объекта Person. После этого объект PersonRec добавляется в массив PersonArr:
function PersonToArray(sArr) {
 //Создаем новый объект Person
В PersonRec=new Person(sArr[0], sArr[1], sArr[2], sArr[3], sArr[4], sArr[5], sArr[6]);
 //Сохраняем объект Person в массиве
В PersonArr[PersonArr.length]=PersonRec;
}
Конструктор объекта Person имеет следующий вид:
function Person(LastName,Name,Phone,Street,House,App,Note) {
 this.LastName=LastName; //Фамилия
В this.Name=Name;В В В В В В В В //РРјСЏ
 this.Phone=Phone;      //Телефон
 this.Street=Street;    //Улица
 this.House=House;      //Дом
 this.App=App;          //Квартира
 this.Note=Note;        //Примечание
}
Перейдем теперь к рассмотрению функции ListPersonArray():
function ListPersonArray() {
var i;
 //Сортировка массива по фамилии
В PersonArr.sort(SortLastName);
 //Цикл по всем элементам массива PersonArr
В for (i=0;i<=PersonArr.length-1;i++) {
 //Запись информации в выходной файл
В PrintPerson(PersonArr[i]);
В }
}
Сначала здесь производится сортировка массива PersonArr в возрастающем порядке по фамилиям, для чего в качестве параметра метода sort указывается имя SortLastName функции, которая производит сравнение двух элементов массива:
function SortLastName(Pers1,Pers2) {
В if (Pers1.LastName<Pers2.LastName) return -1;
В else if (Pers1.LastName==Pers2.LastName) return 0;
В else return 1;
}
ЗамечаниеСортировать массивы подобным образом можно только в сценариях JScript, где массивы рассматриваются как объекты. В сценариях VBScript отсутствуют встроенные средства для сортировки массивов
После сортировки массива содержимое его элементов в цикле выводится в файл out.txt с помощью функции PrintPerson(PersRec):
function PrintPerson(PersRec) {
 FOut.WriteLine("Фамилия : "+PersRec.LastName);
В FOut.WriteLine("РРјСЏ : "+PersRec.Name);
 FOut.WriteLine("Телефон: "+PersRec.Phone);
 FOut.WriteLine("Улица: "+PersRec.Street);
 FOut.WriteLine("Дом: "+PersRec.House);
В FOut.WriteLine("РљРІ.: "+PersRec.App);
 FOut.WriteLine("Заметки: "+PersRec.Note);
В FOut.WriteLine("*********************************");
 //Увеличиваем счетчик числа записей
В NomRec++;
}
В листинге 5.21 приводится полный текст сценария SortName.js.
Листинг 5.21. Вывод содержимого записной книжки с сортировкой по фамилии/*******************************************************************/
/* РРјСЏ: SortName.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                  */
/* Описание: Записная книжка (данные в текстовом файле book.txt). */
/*          Вывод всех записей с сортировкой по фамилии          */
/*******************************************************************/
//Объявляем переменные
var
В WshShell,FSO,
 BasePath, //Путь к текущему каталогу
 PathBook, //Путь к файлу с данными
 PathOut,  //Путь к выходному файлу
 FBook,    //Файл с данными
 FOut,     //Выходной файл
 NomRec=0, //Счетчик количества записей
 PersonRec, //Объект для хранения данных об одном человеке
 PersonArr; //Массив для хранения объектов PersonRec
//Рнициализируем константы для работы СЃ файлами
varВ
В ForReading=1,
В ForWriting=2;
//Конструктор объекта Person
function Person(LastName,Name,Phone,Street,House,App,Note) {
 this.LastName=LastName; //Фамилия
В this.Name=Name;В В В В В В В В //РРјСЏ