- •Федеральное государственное учреждение
- •©Российская таможенная академия, 2008
- •Ростовский филиал
- •© Крицкий с.П.
- •Содержание
- •Введение
- •Основные понятия программирования
- •Классификация языков программирования
- •Характеристика систем программирования на языкахJavaScript/Jscript
- •Типы значений в языкеJavaScript
- •Числовые литералы и значения и их организация в памяти Литералы целых чисел
- •Литералы вещественных чисел (чисел с плавающей точкой)
- •Логические литералы и значения и их организация в памяти
- •Строковые литералы, значения и их организация в памяти
- •Массивы и их организация в памяти. Многомерные массивы, матрицы
- •Записи и их организация в памяти
- •Операции над различными типами данных
- •Арифметические операции
- •Строковые операции
- •Логические операции
- •Операции сравнения
- •Операции выборки
- •Переменные, выражения, условия Переменные
- •Выражения
- •Вызовы функций и методов
- •Порядок вычисления выражения
- •Операции присваивания
- •Автоматическое преобразование типов значений. Функции преобразования и проверки типов
- •Ввод и вывод значений
- •Понятие оператора. Простые и составные операторы. Блок-схемы программ и модулей Операторы и модули
- •Блок-схемы
- •Составные операторы (последовательность, условные). Их синтаксис, блок-схемы и правила выполнения Последовательность операторов
- •Условный операторif … else
- •Операторы цикла (while, do-while и for). Их синтаксис, блок-схемы и правила выполнения. Операторыbreakиcontinue Оператор циклаwhile
- •Операторbreak
- •Операторcontinue
- •Оператор циклаdo…while
- •Оператор циклаfor
- •Функции. Определение и вызов. Выход из функцииreturn. Массив аргументовarguments Определение функции – операторfunction
- •Выход из функции – операторreturn
- •Определение переменной – операторvar
- •Отладка программ. Трассировка, отладочная печать. Тестирование программы
- •Основные понятия объектного подхода
- •ОбъектMath, назначение, свойства, методы. Значения NaN, Infinity, null, undefined.
- •Свойства объектаMath– константы:
- •Методы объекта Math
- •Специальные константы
- •Массивы как объекты в языкеJavaScript. Конструкторы, свойства и методы массивов. Задача копирования массива вJavaScript
- •Конструктор объектов типаArray
- •Свойство объектов типаArray
- •Методы объектов типаArray
- •Типичные задачи с массивами: линейная алгебра
- •Скалярное произведение векторов
- •Произведение матриц
- •Транспонирование квадратной матрицы
- •Типичные задачи с массивами: сортировка. Сортировка вставками. Методsort
- •Сортировка вставками
- •Методsort
- •Типичные задачи с массивами: поиск. Двоичный поиск в упорядоченном массиве
- •Обработка строк. Конструкторы, свойства, методы строк
- •Конструктор объектов типаString
- •Свойство объектов типаString
- •Методы объектов типаString
- •Шаблоны и регулярные выражения. Их использование методами строк.
- •Простые шаблоны
- •Составные шаблоны
- •Пользовательский интерфейс программ. Общее понятие
- •Html-страница как средство интерфейса для программ на языкеJavaScript. Тэги и атрибутыHtml
- •ОбъектыHtml-страниц иWeb-браузера, их свойства и методы. События и их обработка Объектные модели
- •Объекты страницы
- •Объекты браузера
- •СтилиHtml-объектов. Свойства позиционирования объектов страницы
- •Таймеры, примеры использования
- •Понятие ссылочной структуры данных. Односвязный список. Запись списков с помощью литералов.
- •Понятие стека. Функции для стека
- •Двухсвязный список, его структура
- •Понятие очереди и дека, их организация
- •Понятие дерева как ссылочной структуры. Бинарные деревья. Представление дерева литералом
- •Обработка деревьев. Рекурсия
- •Обход дерева «в глубину»
- •Обход дерева «в ширину»
- •Файлы и файловая система
- •Работа с текстовыми файлами
- •Объекты типа TextStream
- •Управление файлами и папками
- •Коллекции дисков, папок и файлов
- •Технология и методология создания программ
- •Жизненный цикл программы
- •Организация процесса разработки
- •Методологии проектирования программ
- •Заключение
- •Приложение 1. Теги, атрибуты и соответствующие свойства Общая структура html-документа
- •Форматирование текста
- •Вставка графики
- •Гиперссылки и карты
- •Приложение 2. События вHtmLи их источники
- •Приложение 3. Атрибуты и свойства стилейCss
- •Приложение 4. Работа с файловой системой вJScript
- •Свойства, методы и коллекции объектов файловой системы
- •Список литературы
- •Словарь терминов
- •If (условие) оператор1 [else оператор2]
- •Основы программирования
Управление файлами и папками
Кроме работы с текстовыми файлами, объект типа FileSystemObject предоставляет средства для управления папками и любыми файлами, а именно, для их создания, удаления, копирования и перемещения. Для этого можно использовать следующие методы объекта типа FileSystemObject:
Для создания файлов и папок –
Рассмотренные выше CreateTextFile и OpenTextFile (других методов создания файлов нет).
CreateFolder(путь папки) – если путь правильный и указанной папки там нет, создаёт папку и возвращает связанный с ней объект типа Folder; в противном случае возникает ошибка.
Пример:
fso=new ActiveXObject("Scripting.FileSystemObject");
a=fso.CreateFolder("c:\\new folder");
Для удаления файлов и папок –
DeleteFile(путь файла [, только для чтения]) – удаляет указанный файл, если он не является файлом с атрибутом «только для чтения»; логическое значение второго параметра разрешает (true) или запрещает (false или отсутствие этого параметра) удалять файл «только для чтения»; если путь неправильный, возникает тяжёлая ошибка.
DeleteFolder(путь папки [, только для чтения]) – удаляет указанную папку (вместе со всем содержимым), если она не является папкой с атрибутом «только для чтения»; логическое значение второго параметра разрешает (true) или запрещает (false или отсутствие этого параметра) удалять папку «только для чтения»; если путь неправильный, возникает тяжёлая ошибка.
Эти методы не выдают значений.
Пример (продолжение предыдущего примера):
fso.DeleteFolder("c:\\new folder");
Другой вариант удаления этой папки с использования аналогичного метода Delete для объектов типа Folder и File: a.Delete();
Для копирования и перемещения папок и файлов –
CopyFolder(путь источника, путь назначения [, заменить]);
MoveFolder(путь источника, путь назначения);
CopyFile(путь источника, путь назначения [, заменить]);
MoveFile(путь источника, путь назначения).
Эти методы могут копировать и перемещать сразу несколько объектов. Никакого значения они не выдают. Аналогично методу Delete есть методы для копирования и перемещения только одного объекта для объектов типа Folder и File. Более детальное описание особенностей всех этих методов довольно громоздко и выходит за рамки курса.
В ряде случаев, например, при копировании одним методом нескольких файлов бывает необходимо получить ссылку на объект типа Drive, Folder или File по пути соответствующего элемента файловой системы. Для этого предназначены методы GetDrive(буква или путь диска), GetFile(путь файла), GetFolder(путь папки) объекта типа FileSystemObject.
Для того, чтобы избежать многих ошибок, программа должна проверять, существуют ли на самом деле диски, папки и файлы, указанные путями. Это делается с помощью методов DriveExists(буква или путь), FileExists(путь), FolderExists(путь) объекта FileSystemObject. Они выдают соответствующее логическое значение.
Коллекции дисков, папок и файлов
Состав файловой системы, пути файлов, папок и даже дисков часто изменяются. Поэтому не всегда можно в программе воспользоваться методами GetDrive, GetFile, GetFolder, параметром которых является путь соответствующего объекта. Для доступа к файловой системе в таких случаях объект FileSystemObjectсодержит коллекцию дисков Drives, а каждая папка содержит коллекцию непосредственно содержащихся в ней папок (коллекцияSubFolders, тип её называетсяFolders) и файлов (коллекцияFiles). Просмотр этих коллекций осуществляется с помощью специального объектаEnumerator– счётчика элементов коллекций.
Элементами коллекций Drives, Folders и Files являются объекты типа Drive, Folder и File, соответственно. Заметим, что, имея объект типа Drive, получить доступ к его папкам и файлам можно через свойство RootFolder, значением, которого является корневая папка диска (объект типа Folder), а затем уже через её коллекции SubFolders и Files. В сценарии это будет выглядеть следующим образом:
diskfolders = drive.RootFolder.SubFolders
diskfiles = drive.RootFolder.Files
Каждая из этих коллекций имеет свойство Count, значением которого является число элементов коллекции. Его можно использовать, например, для того, чтобы узнать, пуста ли коллекция (значение Count в этом случае равно 0).
Для просмотра коллекции необходимо создать её счётчик с помощью конструктора Enumerator:
ecollect = new Enumerator(коллекция)
При создании счетчика его указатель будет установлен на первый элемент коллекции, а для пустой коллекции – в позицию конец коллекции (после последнего элемента). Элемент, на который указывает счётчик, называется текущим.
Для извлечения текущего элемента следует использовать метод счётчика item(): elem = ecollect.item();
Для перехода счётчика к следующему или к первому элементу коллекции служат методы moveNext() и moveFirst(), соответственно. При этом контроль за окончанием коллекции следует осуществлять м помощью свойства счётчика atEnd(), которое истинно, если указатель счётчика находится в позиции конец коллекции (после её последнего элемента).
Приведём два примера использования коллекций и их счётчиков.
Пример. Просмотр дисков системы и печать их свойств:
fso=new ActiveXObject("Scripting.FileSystemObject");
//Создаётся счётчик коллекции дисков.
ed = new Enumerator(fso.Drives);
//Текущим становится первый диск коллекции.
//Дальше в цикле просматриваются диски и их свойства
for (; !ed.atEnd(); ed.moveNext())
{d = ed.item(); //Выбирается текущий диск.
//и печатается в HTML-страницу буква диска.
document.write(d.DriveLetter + ": ");
if (d.IsReady) //Если диск готов (стоит в дисководе),
//печатается его полный объём и объём свободной памяти.
{document.write(" Объём: " + d.TotalSize);
document.write(" Свободно: " + d.FreeSpace)};
//В конце строки выводится тег «разрыв строки»,
//чтобы информация о следующем диске выводилась с новой строки.
document.write("<br>");
};
Пример. Поиск файла на диске. Файлы с одинаковыми именами могут находиться в разных папках диска. Печатаются все пути таких файлов:
<p id="res"></font>
<!-- Результаты поиска выводятся в абзац с именем res -->
<script>//Поиск и выдачу результата осуществляет функция find,
//которая вызывается в конце сценария. Для поиска файлов
//в определённой папке функция find вызывает рекурсивную
// функцию findR
function find(d, fn)
//d – буква диска, fn – имя файла с расширением
{res.innerHTML = "";//Удаляется результат предыдущего поиска
if (!(fso.DriveExists(d) && fso.GetDrive(d).IsReady)
{alert("Такого диска нет!"); return}
//Поиск начинается, если указанный диск существует и готов
var oFold=fso.GetDrive(d).RootFolder;
//Определяется корневая папка и в ней происходит поиск
//и вывод результата
findR(oFold, fn);
//Затем выводится сообщение о конце поиска
res.innerHTML += "<h2>Поиск закончен!</h2>"
};
function findR(oFold, fn)
//fn – имя файла с расширением,
//oFold – папка (объект типа Folder, в которой нужно искать
{//Поиск сначала идёт в коллекции файлов папки oFold
var efi = new Enumerator(oFold.Files);
for (; !efi.atEnd(); efi.moveNext())
if (efi.item().Name == fn)
{res.innerHTML += efi.item().Path + "<br>";
break}; //Файл в папке только один
//Затем поиск идёт в коллекции подпапок папки oFold
var esf = new Enumerator(oFold.SubFolders);
for (; !esf.atEnd(); esf.moveNext())
findR(esf.item(), fn)
};
//Создание объекта FileSystemObject и начало поиска
fso=new ActiveXObject("Scripting.FileSystemObject");
find("C","IO.SYS")
</script>
