VBA для чайников
Шрифт:
objTextStreaml.Close
objTextstream2.Close
objTextStream3.Close
End Sub
Хотя во всех трех случаях создаются объекты Text Stream, они не взаимозаменяемы. От выбранного в каждом конкретном случае способа зависит и способ доступа к данным в соответствующем файле. Подробнее об этом говорится в следующем разделе.
Каждый конкретный объект Text Stream позволяет либо читать данные из файла, либо записывать данные в файл, либо и то, и другое. Объект Text Stream позволяет выбрать для него один или несколько из трех режимов ввода-вывода. Один из этих режимов только для чтения, и есть два разных режима для записи - обычная запись (когда предполагается запись символов с самого начала текстового потока) и добавление (когда предполагается добавление символов в конец текстового потока).
Доступные
Метод | Доступные режимы ввода-вывода для определенного объекта текстового потока |
Create Text File (объект FileSystemObject) | Чтение и запись |
Open Text File (объект ileSystemObject ) | Чтение и добавление |
Open As Text Stream (объект File ) | Чтение, запись или добавление (только один из режимов) |
Когда объект Text Stream создается из объекта File, режим ввода-вывода задается как аргумент метода OpenAsText Stream с помощью трех соответствующим образом названных констант: For Reading (для чтения), For Writing (для записи) и ForAppending (для добавления). Например, если нужно добавить текст в конец существующего файла, откройте текстовый поток с помощью следующего оператора:
Set objTS = objFile.OpenAsTextStreamfForAppending)
Открыв объект Text Stream в подходящем режиме доступа, можно начинать работу с содержимым файла. В вашем распоряжении для этого есть несколько простых методов.
Можно читать и записывать данные как отдельные символы или строки. Если только все элементы данных не равны по длине, я рекомендую построчное считывание и построчную запись. Когда читаются строки данных, вам не нужно знать длину строк, а только их номер. Сама же "строка" может состоять из любого числа символов и даже вообще не содержать ни одного символа.
В любом случае, чтобы читать данные из текстового потока, присвойте переменной значение, возвращаемое одним из подходящих методов объекта Text Stream. Следующий фрагмент программного кода подскажет вам, как это сделать:
' чтение следующей строки из файла в переменную
strНекоторыйТекст = Text Stream.ReadLine
Для чтения предусмотрены следующие методы.
Метод (объекта Text Stream) | Выполняемое действие |
Read (число_символов) | Чтение заданного числа символов начиная с текущей позиции в файле |
ReadLine | Чтение всех символов начиная с текущей позиции в файле до следующего символа перехода на новую строку |
ReadAll | Чтение всего файла |
Skip ( число_символов) | Пропуск заданного числа символов при чтении файла. Следующее чтение должно начаться с первого из символов, следующих за пропущенными |
SkipLine | Пропуск следующей строки в файле. Следующее чтение должно начаться с первого из символов, следующих за пропущенной строкой |
Чтобы записать данные в текстовый поток, задайте текст для записи в виде строки как аргумент метода Write или WriteLine, как в следующем примере:
' запись строки
objTextStream.Write "Алло, центральная!"
' запись значения переменной с последующим
' перехода на новую строку
objTextStream.WriteLine strMyTwoBits
Метод (объекта TextStream) | Выполняемое действие |
Write(строка) | Запись в текстовый поток указанной строки |
WriteLine(строка) | Запись в текстовый поток указанной строки с последующим символом перехода на новую строку |
WriteBlankLines(число_ строк) | Запись в текстовый поток указанного числа символов перехода на новую строку |
Завершив чтение текстового потока или запись в текстовый поток, всегда закрывайте объект Text Stream, чтобы освободить системные ресурсы и память и чтобы другие программы и пользователи смогли получить доступ к соответствующему файлу. Здесь нужен метод Close:
objText Stream.Close
Текстовые потоки хороши для чтения и записи относительно небольших по объему порций данных. Основная проблема состоит в том, что нельзя свободно перемещаться внутри текстового потока. Методы чтения начинают чтение данных с самого начала файла и читают его до конца. И хотя при чтении можно использовать методы Skip и Ski pLine, чтобы перепрыгнуть заданное число символов или строк, в обратном направлении перескакивать нельзя - выполнение оператора типа objText Stream. Skip (-10) порождает ошибку. к сожалению, объекты Text Stream не имеют методов или свойств, позволяющих прямо задать стартовую позицию для следующего чтения. Однако примерно то же самое можно сделать по-другому. Сначала нужно закрыть и снова открыть текстовый поток, а затем с помощью метода Skip пропустить на одну позицию меньше, чем номер нужной позиции. Например, если вы хотите прочитать 25 символов, начиная с 5-го символа в файле, соответствующую задачу выполнят следующие операторы:
objTextStream.Close
Set objTextStream = bjFile.OpenAsTextStream(ForWriting)
objTextStream.Skip(4)
objTextStream.Read(25)
При записи данных в текстовые потоки вы еще больше ограничены, чем при чтении, поскольку вообще не допускаются пропуски в файле. Каждая последующая операция записи начинается там, где закончилась предыдущая, и при этом переписывается любой текст, который может оказаться на соответствующих позициях в файле.
Поэтому, если вам нужно внести в каком-то месте файла некоторые изменения, не затрагивая при этом остальной текст, прочитайте все содержимое файла в строку, соответствующим образом измените ее, а затем замените все данные в файле новыми данными.
Использование объектов Dictionary
В объектах Dictionary (Словари) удобно хранить табличную информацию, организованную в два столбца. В каждой строке такой таблицы в одном столбце хранится имя элемента, а в другом - нужное вам значение. Действительно, очень похоже на словарь; заголовки словарных статей - это имена элементов, а словарные определения - значения. Правда, объекты Dictionary допускают хранение значений любых типов.
С объектами Dictionary можно работать и в VBA 5, и в VBA 6. Но эти объекты не встроены в VBA. Они находятся в библиотеке Microsoft Scripting Runtime, использование которой уже обсуждалось в разделе "Работа с файлами". Чтобы использовать объекты Dictionary в VBA-программе, нужно выполнить инструкции, приведенные там под заголовком "Ссылки на библиотеку Microsoft Scripting Runtime".
Базисные сведения об объектах Dictionary
При объявлении переменных для словарей и последующем их создании используйте приемы, описанные выше в разделе "Доступ к объектам других приложений". Например:
Dim dictBigCats As Scri pti ng.Dictionary
Set dictBigCats = CreateObject("Scri pti ng.Dictionary")
Теперь можно добавлять в словарь имена элементов и значения с помощью метода Add:
dictBigCats.Add "Гепард", "Быстрый и поджарый"