Разработка записной книжки в формате текстового файла

Разработка записной книжки в формате текстового файла

Последний пример, который мы рассмотрим в этой главе, посвящен обработке данных, хранящихся в текстовом файле с разделителями (это может быть, например, выборка из электронной таблицы, базы данных и т.п.).

Предположим, что имеется файл book.txt, содержащий информацию из записной книжки в следующем формате:

Фамилия|Имя|Телефон|Улица|Дом|Кв.|Примечание

В качестве примера мы будем рассматривать файл book.txt, приведенный в листинге 5.20.

Листинг 5.20. Содержимое файла book.txt

Потапов|Сергей|55-55-55|Моховая|3|10|Без примечаний

Попов|Андрей|56-56-56|Ленина|3|5|Без примечаний

Иванов|Иван|17-17-17|Садовая|4|6|Очень хороший человек

Казаков|Сергей|24-19-68|Полежаева|101|22|Тоже очень хороший человек

Ниже приведен сценарий SortName.js, который реализует одну из функций для работы с записной книжкой — в результате работы этого сценария все записи из book.txt сортируются по фамилии и отображаются в Блокноте (рис. 5.14).

Опишем кратко алгоритм работы сценария SortName.js.

1. Информация из файла book.txt считывается в массив PersonArr. Каждый элемент массива является объектом типа Person, в котором хранятся все данные для одного человека.

2. Массив PersonArr сортируется в нужном порядке (в нашем случае — по возрастанию фамилий).

3. Содержимое всех записей из массива PersonArr выводится в текстовый файл out.txt.

4. Файл out.txt открывается в Блокноте.

Как мы видим, взаимодействие с текстовым файлом данных происходит только при загрузке его содержимого в массив. Поэтому остальная часть сценария не зависит от формата файла с данными и может в дальнейшем применяться без изменений для обработки файлов в XML-формате.

Рис. 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;         //Имя

 this.Phone=Phone;       //Телефон

 this.Street=Street;     //Улица

 this.House=House;       //Дом

 this.App=App;           //Квартира

 this.Note=Note;         //Примечание

}

//Заполнение нового элемента массива

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 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();

}

//Запись в выходной файл итоговой информации

function TopReport(Mess) {

 FOut.WriteLine(Mess);

 FOut.WriteLine("--------------------");

 FOut.WriteLine("");

}

//Запись в выходной файл итоговой информации

function BottomReport() {

 FOut.WriteLine("Всего записей: "+NomRec);

}

//Запись данных из объекта Person в выходной файл

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++;

}

//Сортировка массива и вывод его содержимого в выходной файл

function ListPersonArray() {

var i;

 //Сортировка массива по фамилии

 PersonArr.sort(SortLastName);

 //Цикл по всем элементам массива PersonArr

 for (i=0;i<=PersonArr.length-1;i++) {

  //Запись информации в выходной файл

  PrintPerson(PersonArr[i]);

 }

}

//Функция для сортировки массива по фамилии

function SortLastName(Pers1,Pers2) {

 if (Pers1.LastName<Pers2.LastName) return -1;

 else if (Pers1.LastName==Pers2.LastName) return 0;

 else return 1;

}

//Вывод содержимого файла с данными                                          

function ListFile() {

 //Считывание данных из файла в массив

 FileToArray();

 //Запись информации из массива в выходной файл

 ListPersonArray();

}

//Просмотр содержимого выходного файла в Блокноте

function MakeOut() {

 //Закрываем выходной файл

 FOut.Close();

 //Открываем выходной файл в Блокноте

 WshShell.Run("notepad "+PathOut,1);

}

//Построение путей к файлам

function InitPath() {

 BasePath=WshShell.CurrentDirectory+"\";

 //Путь к файлу с данными

 PathBook=BasePath+"book.txt",

 //Путь к выходному файлу

 PathOut=BasePath+"out.txt";

}

//Основная запускная функция

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();

}

/*******************  Начало  **********************************/

Main();

/*************  Конец *********************************************/ 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Ввод и оформление текстового контента

Из книги автора

Ввод и оформление текстового контента Как правило, после предварительной разметки веб-страницы и формирования ее структуры веб-разработчики занимаются вводом и оформлением текстового контента, а уже после этого добавляют на страницу ссылки, изображения и прочие


Установка размера файла, инициализация файла и разреженные файлы

Из книги автора

Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла


Просмотр содержимого записной книжки

Из книги автора

Просмотр содержимого записной книжки Для того чтобы использовать схему XML DOM в сценарии SortNameMSXML.js, осуществляющем вывод информации из XML-файла book.xml в Блокнот, нужно внести изменения в три функции: GetTagVal(obj, tgName), PersonToArray(XNode) и FileToArray(). Сценарий, который получится в результате


Однозадачный сценарий для работы с записной книжкой

Из книги автора

Однозадачный сценарий для работы с записной книжкой Как мы видим из вышеприведенных примеров, ни объектная модель WSH, ни языки JScript и VBScript не предоставляют средств для создания полноценного графического интерфейса пользователя.Тем не менее, такой интерфейс в сценариях WSH


Вывод данных из записной книжки в документ Microsoft Word

Из книги автора

Вывод данных из записной книжки в документ Microsoft Word В качестве примера взаимодействия WSH с Microsoft Word мы рассмотрим два сценария, которые будут создавать документы Word и выводить туда информацию из записной книжки в XML-формате, которая хранится в файле book.xml. Рис. 8.4. Вывод


Вывод данных из записной книжки в таблицу Microsoft Excel

Из книги автора

Вывод данных из записной книжки в таблицу Microsoft Excel Напишем сценарий, который будет создавать файл (рабочую книгу) Microsoft Excel и заносить туда данные из записной книжки (рис. 8.10). Рис. 8.10. Рабочая книга Microsoft Excel с данными из файла book.xmlДля того чтобы использовать определенные в


Создание текстового слоя

Из книги автора

Создание текстового слоя Как мы уже отмечали, при использовании инструментов Горизонтальный текст и Вертикальный текст новый слой создается автоматически, как только вы вводите первый символ.Чтобы добавить в изображение текст, нужно выполнить следующие действия.1.


Настройки текстового редактора

Из книги автора

Настройки текстового редактора Как уже говорилось, в программу InDesign встроен текстовый редактор для набора, проверки и исправления текста. В разделе Story Editor Display (Отображение текстового редактора) (рис. 7.13) настраивается внешний вид текста в редакторе. Это никак не повлияет


Чтение из текстового файла

Из книги автора

Чтение из текстового файла Теперь выясним, как программными средствами читать данные из файла, используя соответствующий тип StreamReader. Вы должны помнить, что этот класс получается из TextReader, функциональные возможности которого описаны в табл. 16.8.Таблица 16.8. Основные члены


6.1. Система текстового поиска

Из книги автора

6.1. Система текстового поиска В систему текстового поиска входят текстовый файл, указанный пользователем, и средство для задания запроса, состоящего из слов и, возможно, логических операторов.Если одно или несколько слов запроса найдены, печатается количество их


Редактирование текстового блока

Из книги автора

Редактирование текстового блока Текстовый блок является таким же объектом, как и любой другой объект. Однако поскольку текст имеет свою специфику, то и результаты выполняемых над блоком текста операций будут иметь определенные отличия от результатов работы тех же


5.14. Дополнительные возможности текстового редактора

Из книги автора

5.14. Дополнительные возможности текстового редактора Оформление сносокСноска – это примечание к тексту, которое располагается чаще в нижней части страницы (обычная) или в конце документа (концевая). Каждая сноска имеет либо номер, который проставляется автоматически,


Параметры текстового блока

Из книги автора

Параметры текстового блока Задавать параметры можно не только для отдельных символов или отдельного абзаца текста, но и для всего текстового блока. Этих параметров немного, но они весьма важны.Начнем с кнопки-выключателя, расположенной в панели Properties: Если она включена,