Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
27.04.2015
Размер:
253.73 Кб
Скачать

4.10.2. Средства 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. Чтение и запись в текстовый файл"

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

Public Class Form1

'Процедура открытия файла для вывода и

'записи содержимого текстового поля в открытый файл

Sub SaveFile(ByVal FileName As String, ByVal T As TextBox)

If FileName <> "" Then

FileOpen(1, FileName, OpenMode.Output)

PrintLine(1, T.Text)

FileClose(1)

End If

End Sub

'Отображение содержимого файла в текстовом поле

Sub OpenFile(ByVal FileName As String, ByVal T As TextBox)

Dim AllText As String = ""

Dim LineOfText As String = ""

Try 'Открытие файла и перехват всех ошибок

FileOpen(1, FileName, OpenMode.Input)

Do Until EOF(1) 'Чтение строки из файла, до тех пор пока не

LineOfText = LineInput(1)' будет достигнут конец файла

'Добавление строки в переменную ALLText

AllText = AllText & LineOfText & vbCrLf

Loop

T.Text = AllText'Отображение содержимого файла в текст. поле

T.Enabled = True'Включение текстового курсора

Catch ex As Exception

MsgBox("Ошибкаоткрытияфайла.")

Finally

FileClose(1) 'Закрытие файла

End Try

End Sub

'Функция ввода пути к файлу из TextBox

Function vvod(ByVal T As TextBox) As String

Return T.Text

End Function

Private Sub Button3_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button3.Click

End

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

Dim FileName As String

FileName = vvod(TextBox2)

OpenFile(FileName, TextBox1)

End Sub

Private Sub Button2_Click_1(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button2.Click

Dim FileName As String

FileName = vvod(TextBox2)

SaveFile(FileName, TextBox1)

End Sub

End Class

Рис. 4.10.2-2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 4.10.2-3

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

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

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

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

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

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

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

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

Try

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

Catch

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

Finally

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

End Try

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

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

Пример 4.10.2-2. Создать проект сортировки строк текста, который загружается из текстового файла и после сортировки сохраняется в этом же файле.

  1. Форма проекта Пример 4.10.2-2 показана на рис. 4.10.2-4

Рис. 4.10.2-4

  1. Программный код проекта показан на рис. 4.10.2-5. Он содержит процедуры OpenFile( ), SaveFile( ), vvod( ) и использует метод Sort( ) класса Array для сортировки массива строк. Для преобразования загруженной строки в массив строк используется функция Split( ), а в качестве разделителей – коды возврата каретки и перевода строки (vbCrLf). Обратное преобразование массива в строку производится с помощью функции Join( ).

Public Class Form1

Function vvod(ByVal T As TextBox) As String

Return T.Text

End Function

Private Sub Button3_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button3.Click

End

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button2.Click

Dim Str1, Str2 As String

Str1 = vvod(TextBox2)

Dim Mas() As String = Split(Str1, vbCrLf)

Array.Sort(Mas) : Str2 = Join(Mas)

TextBox2.Text = Str1 & vbCrLf & vbCrLf & Str2

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button1.Click

Dim FileName As String

FileName = vvod(TextBox1) : OpenFile(FileName, TextBox2)

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button4.Click

Dim FileName As String

FileName = vvod(TextBox1)

SaveFile(FileName, TextBox2)

End Sub

Sub OpenFile(ByVal FileName As String, ByVal T As TextBox)

Dim AllText As String = "", LineOfText As String = ""

Try

FileOpen(1, FileName, OpenMode.Input)

Do Until EOF(1) 'чтение строки из файла

LineOfText = LineInput(1)

AllText = AllText & LineOfText & vbCrLf

Loop

T.Text = AllText : T.Enabled = True

Catch

MsgBox("Ошибка при открытии файла. ")

Finally

FileClose(1) 'закрытие файла

End Try

End Sub

Sub SaveFile(ByVal FileName As String, ByVal T As TextBox)

If FileName <>""Then

FileOpen(1, FileName, OpenMode.Output)

'Запись содержимого текстового поля в файл

PrintLine(1, T.Text) : FileClose(1)

End If

End Sub

End Class

Рис. 4.10.2-5

Результат работы программы показан на рис. 4.10.2-6.

Рис. 4.10.2-6

Соседние файлы в папке Учебное_пособие-Раздел4-Информатика-270100з