Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

objTextStreaml.Close

objTextstream2.Close

objTextStream3.Close

End Sub

Хотя во всех трех случаях создаются объекты Text Stream, они не взаимозаменяемы. От выбранного в каждом конкретном случае способа зависит и способ доступа к данным в соответствующем файле. Подробнее об этом говорится в следующем разделе.

Каждый конкретный объект Text Stream позволяет либо читать данные из файла, либо записывать данные в файл, либо и то, и другое. Объект Text Stream позволяет выбрать для него один или несколько из трех режимов ввода-вывода. Один из этих режимов только для чтения, и есть два разных режима для записи - обычная запись (когда предполагается запись символов с самого начала текстового потока) и добавление (когда предполагается добавление символов в конец текстового потока).

Доступные

для каждого конкретного объекта Text Stream режимы зависят от того, каким способом создан текстовый поток, а в случае метода OpenAsText Stream объекта File - от указанного для него режима. Вот соответствующая сводка.

Метод

Доступные режимы ввода-вывода для определенного объекта текстового потока

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 "Гепард", "Быстрый и поджарый"

Поделиться:
Популярные книги

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4