Итак, теперь мы добрались до работы с файлами.
Как мы уже говорили, В VBS для работы с файловой системой существует FileSystemObject.
При помощи FSO можно работать с файлами. Алгоритм начала работы такой:
1. Объявляем переменную. Не обязательно такое же название, но оно наиболее логичное. А ещё, ваш код будет понятнее для других.
Dim FSO
2. Записываем в переменную FSO копию объекта FileSystemObject, который предназначен для работы с файловой системой Windows
Set FSO=CreateObject(«Scripting.FileSystemObject»)
Теперь, давайте ознакомимся с небольшим арсеналом методов:
FSO.GetBaseName(ПутьКФайлу) — Вернёт имя файла без расширения
FSO.GetExtensionName(ПутькФайлу) — Вернёт расширение файла
FSO.GetFileName(ПутьКФайлу) — Вернёт имя файла с расширением
FSO.GetParentFolderName(ПутьКФайлу) — Вернёт каталог, в котором находится файл
FSO.FileExists(ПутьКФайлу) — Проверяет, существует ли файл. Если да, то значение True.
FSO.GetTempName() — Возвращает случайное имя для временного файла
Для получения доступа к файлу необходимо выполнить fso.GetFile(ПутьКФайлу) в какую либо переменную. Например:
SET File=fso.GetFile(«C:\q1\q1.txt»)
Далее мы сможем выполнить для указанного файла следующее:
File.Copy(ПолныйПуть) — Копировать файл в указанное место. Путь необходимо указывать полный, с названием файла и его расширением.
Например: File.Copy(«C:\q1\new\q1.txt»)
Так же мы можем:
File.Move(ПолныйПуть) — Перемещаем файл
File.Delete — удаляем полученный файл. Указывать путь не надо
Но самое полезное — работа с текстовым файлом, так называемое Text Stream.
TextStream
Итак, работа с текстом.
Не забываем, что в любом случае код наш начнётся с
Dim FSO
Set FSO=CreateObject(«Scripting.FileSystemObject»)
Теперь, давайте рассмотрим наши возможности:
1. Создание текстового файла
Set File=FSO.CreateTextFile(полный_путь_к_файлу)
2. Открытие текстового файла
Set txtfile = fso.OpenTextFile(«c:\test.txt»)
3. Чтобы добавлять в файл текст, нужно его открыть для записи
Set ts = fso.OpenTextFile(«c:\test.txt», ForWriting, True)
или
Set tfile = fso.GetFile(«c:\test1.txt»)
Set tf = tfile.OpenAsTextStream(ForWriting, True)
Теперь, давайте разберёмся, как записывать в файл текст. Для этого есть следующие методы:
Write — записывает символы в файл.
WriteLine — записывает строку в файл.
WriteBlankLines(число) — записывает пустые строки в файл.
Skip(число) — пропускает нужное число символов в строке.
SkipLine — пропускает строку.
Давайте приведём пример создания файла и записи в него текста.
Как мы видим, строки 4, 5 и 6 запишут в одну строчку «Раз Два Три!». 7 строчка вставит 3 пустых строки, а 8 строчка кода добавит в файл строчку «Ёлочка гори!!» и перейдёт на след. строку. Ну и 9 строчка закроет файл.
Теперь поговорим про чтение из файла:
Read(число) — читает указанное количество символов из файла.
ReadLine — читает строку из файла.
ReadALL — читает всё содержимое
Skip(число) — пропускает нужное число символов в строке.
SkipLine — пропускает строку.
Приведём пример считывания текста из файла:
А так же есть не менее полезные вещи:
AtEndOfLine — Определяет достигнут ли конец строки(Boolean).
AtEndOfStream — Определяет достигнут ли конец файла(Boolean).
Column — номер текущего символа в строке.
Line — номер текущей строки.
Первые два метода можно использовать для условий того же Do While или Do Until. Например:
Do While Not File.AtEndOfLine
Последние два метода удобно использовать для контролирования процесса считывания, например чтобы при поиске какой либо информации в момент положительного результата знать, в какой же строчке мы нашли искомый текст и на каком символе. Это позволит минимизировать последующие затраты на заводимые переменные и на действия с ними.
ЗАДАЧИ
Задача1: Дан текстовый файл со списком литературы. Заменить определённые числа в нём и сохранить изменение.
Задача2: Создать текстовый файл, заполненный случайными символами. Вывести его содержимое.
Задача3: Дан текстовый файл, найти в нём какие-либо символы и вывести, в какой строке и на каком месте они стоят.
Задача4: Осуществить поиск директории и вывести процесс выполнения в новый текстовый файл, после чего вывести его содержимое.
Замечена одна интересная особенность. С помощью конструкции While Not TS.AtEndOfLine можно читать содержимое текстовика по строкам, но ежели будет обнаружена пустая строка, то на этом чтение файла закончиться.