Средства VB для доступа к текстовым файлам

Тема 4.10. Текстовые файлы

 

4.10.1. Основные понятия

4.10.2. Средства VВ для доступа к текстовым файлам

4.10.3. Использование классов StreamReader, StreamWriter и объекта

My.Computer.FileSystem для работы с текстовыми файлами

4.10.4. Печать текстовых файлов

4.10.5. Задачи для самостоятельного решения по теме «Текстовые файлы»

4.10.6. Тестовые задания по теме «Текстовые файлы»

 

Основные понятия

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

 

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

 

Каталог (директория или папка) это оглавление файлов. Содержимое каталога можно просматривать, переименовывать зарегистрированные в нем файлы, переносить их содержимое на новое место и удалять. Каталог, как и файл, имеет собственное имя и хранится в другом каталоге наряду с обычными файлами: так образуются иерархические файловые структуры.

 

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

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

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

 

По способу доступа к данным различают файлы последовательного доступа, произвольного доступа и двоичные. В файлах первого вида доступ к информации осуществляется последовательно от начала до конца файла, в файлах произвольного доступа – либо последовательно, либо в произвольном порядке, а в двоичных файлах – побайтно.

 

Текстовые файлы являются последовательными файлами, состоящими из записей переменной длины, расположенными на внешнем носителе. Они называются файлами с последовательным доступом потому, что могут читаться только с самого начала по порядку. Запись нельзя прочитать из середины файла. Каждая запись является строкой текста, которая заканчивается специальными символами-разделителями (vbCrLf или vbNewLine).

Текстовый файл состоит из одной или более строк, слов или симво­лов. Он отличается от файлов документов и веб-страниц, которые содержат форматирующие коды, и от исполняемых файлов, которые содержат инструкции для операционной системы. Обычные текстовые файлы определены в MSWindows как TextDocuments (Текстовые документы) и имеют расширение *.txt. Так как текстовые файлы содержат только обычные распозна­ваемые символы, их можно легко отобразить на экране с помощью стандартных средств VB, например, с помощью объек­тов текстового поля.

Работа с любым файлом, в том числе с текстовыми файлами, состоит из трех этапов:

· открытие файлов;

· чтение или запись информации из файла или в файл;

· закрытие файла.

 

Для загрузки в текстовое поле или строку содержимого текстового файла, а также для записи строковых данных в файл можно использовать как функции VB, так и методы классов
.NET Framework.

В VB можно использовать три способа доступа к текстовым файлам:

1. С использованием дескрипторов (дескрипторный доступ), т.е. процедур и функций VB с указанием номера файла. Эти процедуры и функции являются методами класса FileSystem библиотеки Microsoft.VisualBasic.

2. С использованием методов библиотеки классов System.IO(потоковый доступ).

3. С использованием объекта My.Computer.System.

 

Средства VB для доступа к текстовым файлам

Рассмотрим дескрипторный способ доступа к текстовым файлам, который использует функции VB, представленные в таб. 4.10.2-1.

Таблица 4.10.2-1

Функция Описание
FileOpen() Открывает текстовый файл для ввода или вывода
LineInput() Читает строку из текстового файла
PrintLine() Записывает строку в текстовый файл
EOF() Проверяет достижение конца текстового файла
FileClose() Закрывает текстовый файл

 

Для указания путей к файлам можно использовать элемент управления OpenFileDialog, позволяющий запрашивать у пользователя путь к файлу и выбирать тот текстовый файл в программе, который следует открыть. Этот элемент уп­равления имеет множество свойств, в том числе свойство Filter, котороеуправляет тем, какой тип файлов в нем отображается, и свойство FileName, котороевозвращает путь к файлу, ука­занный пользователем, а также метод ShowDialog(), который отображает ди­алоговое окно MSWindowsOpen. Подробное описание элементов управления для работы с файлами можно найти в [2 - 4].

Итак, файл может быть открыт с помощью функции FileOpen(), простейший синтаксис которой имеет следующий вид:

FileOpen(НомерФайл а, ПутьФайл, Мода),

где: НомерФайла – это целое число от 1 до 255(дескриптор), которое приписывается файлу при открытии, а затем это число используется, когда требуетсясослаться на этототкрытый файл;

ПутьФайл – это корректный путь в файловой системе MSWindows;

Мода –это ключевое слово, указывающее на то, как файл будетиспользоваться OpenMode.Input (для чтения из файла)иOpenMode.Output (для записи в файл).

Создание новых файлов на диске и сохранение в них данных используется, когда требуется создать соб­ственные отчеты, сохранить важные вычисления или зна­чения, или создать специализированный текстовый процессор или тек­стовый редактор. Вот перечень действий, которые требуется выполнить для этого в программах:

1. Получить ввод от пользователя, выполнить математические вычисления или сделать и то, и другое.

2. Присвоить результаты обработки одной или нескольким переменным.Например, можно присвоить содержимое текстового поля строковой переменной.

3. Получить путь к файлу с помощью TextBox или запросить у пользо­вателя путьс помощью элемента управления SaveFileDialog. Для отображения этого диалогового окна используется метод ShowDialog().

4. Открыть фай­л для записи,в соответствии с полученным путем с помощью функции FileOpen().

5. Использовать функцию PrintLine() для сохранения одного или нескольких значений в открытом файле

6. Закрыть файл с помощью функции FileClose()по окончании записи.

 

Рассмотрим пример, как использовать функцию FileOpen()для открытия тексто­вого файла. Также этотпример демонстрирует, как использовать фун­кции LineInput(), PrintLine()и EOF()для работы с файлом, а для закрытия файла – функцию
FileClose().

 

Пример 4.10.2-1. Создать проект, который будет отображать содержимое файла на форме с помощью текстового поля с использованием фун­кции LineInput(), а после редактирования текстового поля будет записывать строку в текстовый файл.

1. Создать форму проектаПроект-4-10-2-1, которая показана на рис. 4.10.2-1.

Рис. 4.10.2-1

 

Свойства объектов формы сведены в табл. 4.10.2-2.

Таблица 4.10.2-2

Объект Свойство Значение
TextBox1   Enabled False
Multiline True
Name TextBox1
ScrollBars Vertical
TextBox2 Name TextBox2
Multiline True
Label1 Text " Путь файла "
Name Label1
Button1 Name Button1
Text "Загрузить содержимое файла"
Button2 Name Button2
Text "Записать содержимое в файл"
Button3 Name Button3
Text "Конец"
Form1 Text "Пример 4.10.2-1. Чтение и запись в текстовый файл"

 

2. Написать программный код, который представлен на рис. 4.10.2-2.

PublicClassForm1 'Процедура открытия файла для вывода и 'записи содержимого текстового поля в открытый файл Sub SaveFile(ByVal FileName AsString, ByValT As TextBox) If FileName <>""Then FileOpen(1, FileName, OpenMode.Output) PrintLine(1, T.Text) FileClose(1) EndIf EndSub 'Отображение содержимого файла в текстовом поле Sub OpenFile(ByVal FileName AsString, ByValT As TextBox) Dim AllText AsString = "" Dim LineOfText AsString = "" Try'Открытие файла и перехват всех ошибок FileOpen(1, FileName, OpenMode.Input) DoUntilEOF(1) 'Чтение строки из файла, до тех пор пока не LineOfText = LineInput(1)' будет достигнут конец файла 'Добавление строки в переменную ALLText AllText = AllText&LineOfText&vbCrLf Loop T.Text = AllText'Отображение содержимого файла в текст. поле T.Enabled = True'Включениетекстовогокурсора Catchex As Exception MsgBox("Ошибкаоткрытияфайла.") Finally FileClose(1) 'Закрытиефайла EndTry EndSub 'Функция ввода пути к файлу из TextBox Function vvod(ByVal T As TextBox) AsString Return T.Text EndFunction PrivateSub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click End EndSub PrivateSub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim FileName AsString FileName = vvod(TextBox2) OpenFile(FileName, TextBox1) EndSub PrivateSub Button2_Click_1(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim FileName AsString FileName = vvod(TextBox2) SaveFile(FileName, TextBox1) EndSub EndClass

Рис. 4.10.2-2

 

Процедура OpenFile()выполняет следующие действия:

  • объявляет переменные;

· с помощью блока кода Try...Catch…EndTry перехватывает ошибки;

· с помощью функции FileOpen()открывает указанный файл для ввода (чтение из файла);

· использует функцию Linelnput()для построчного копирования файла в строку с именем AllText;

  • копирует строки до тех пор, пока не будет достигнут конец файла – EOF(), или до тех пор, пока в строке не останется больше места (строка AllTextимеет место для очень большого файла, но если в процессе копирования произойдет ошибка, блок Catch выведет со­общение об этой ошибке);

· отображает строку AllTextв текстовом поле и включает полосы прокрутки и текстовый курсор;

· закрывает файл с помощью функции FileClose().

Процедура SaveFile()выполняет следующие действия:

· проверяет правильность пути к файлу;

· с помощью функции FileOpen()открывает указанный файл для вывода (записи в файл);

· использует функцию PrintLine()для записи содержимого текстового поля в файл;

· закрывает файл с помощью функции FileClose().

 

3. Запустить проект Проект-4.10.2-1.

4. Ввести в текстовое поле TextBox2путь к файлу.

5. Щелкнуть мышью на кнопке Загрузить содержимое файла.

В текстовом поле TextBox1появится содержимое текстового файла Тесты.txt (рис. 4.10.2-3).

 

Рис. 4.10.2-3

 

6. Закончив просмотр и отредактировав содержимое текстового поля объекта TextBox1, необходимо щелкнуть на кнопке Записать содержимое строки в файл.

7. Процесс загрузки содержимого текстового файла, его редактирования и записи содержимого текстового поля в файл можно повторить несколько раз.

8. Для окончания работы программы необходимо щелкнуть на кнопке Конец.

 

Рассмотрим подробнее средства VB для обработки ошибок времени выполнения.

 

Ошибки времени выполнения (также называемые исключениями) возникают при нормальных условиях работы - например, из-за отсутствия диска в дисководе или неправильного заданного пути при открытии файла. Блоки кода, обрабатывающие такие ошибки, называются структурными обработчиками ошибок (или структурными обработчиками исключений). Их можно использовать для распознавания ошибок времени исполнения при их возникновении в программе и настройки программы так, что она снова сможет получить управление и продолжить работу. Для этого в VB имеется блок Try…Catch…EndTry – синтаксическая конструкция для обработки ошибок.

Ошибка времени исполнения возникает тогда, когда VB пытается выполнить оператор, который по какой-то причине не может быть выполнен в том виде, в котором он написан. Это не значит, что VB не достаточно «умен», чтобы справиться с проблемой; это значит, что компилятору VB не сказали, что делать, если что-то пойдет не так.

Можно написать специальные процедуры VB, называемые структурными обработчиками ошибо к, которые будут реагировать на ошибки времени исполнения. Обработчик ошибок отслеживает ошибку времени исполнения и говорит программе, как продолжать работу при возникновении этой ошибки. Обработчики ошибок помещаются в процедуры событий, там, где существует возможность возникновения проблемы, или в общие функции или подпрограммы, специально предназначенные для обработки ошибок. Как предполагает их название, обработчики ошибок обрабатывают ошибку с помощью оператора Try…Catch…EndTry и специального объекта отслеживания ошибок – экземпляра класса Exception. Например, если ошибка времени исполнения произошла при загрузке файла с диска, обработчик ошибок может отобразить собственное сообщение об ошибке, которое укажет на проблему.

Оператор Try необходимо поместить в процедуру события непосредственно перед оператором, в котором может произойти непредвиденная ситуация, а блок Catch следует непосредственно за ним и содержит операторы, которые необходимо выполнить, если произойдет ошибка времени исполнения. Также можно использовать некоторые дополнительные операторы, такие, как Finally, а также вложенные блоки кода Try…Catch…EndTry. Базовый синтаксис обработчика исключений Try…Catch…EndTry может иметь следующий формат:

Try

Операторы, которые могут вызвать ошибку времени исполнения

Catch

Операторы, которые выполняются, если ошибка времени исполнения происходит

Finally

Дополнительные операторы, выполняемые независимо от возникновения ошибки

EndTry

 

где Try, Catch и EndTry - это обязательные ключевые слова, а Finally и операторы, которые стоят за ним, необязательны.

 

В примере 4.10.2-1 продемонстрирована обычная ситуация возникновения ошибки времени выполнения, связанная с открытием файла.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: