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

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

Перейти кТеме 4.9 Теме 4.11 Огл. 4.10.1. Основные понятия

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

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

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

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

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

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

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

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

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

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

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

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

Текстовый файл состоит из одной или более строк, слов или символов. Он отличается от

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

Страница 254

Страница 255

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

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

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

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

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

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

.NET Framework.

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

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

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

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

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 (для записи в файл).

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

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

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

 

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

 

Страница 256

 

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.

 

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

 

 

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

Страница 257

 

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( ).

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

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

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

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

(рис. 4.10.2-3).

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

Страница 258

Рис. 4.10.2-3

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

необходимо щелкнуть на кнопке Записать содержимое строки в файл.

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

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

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

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

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

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

Оператор Try необходимо поместить в процедуру события непосредственно перед оператором, в котором может произойти непредвиденная ситуация, а блок Catch следует

непосредственно за ним и содержит операторы, которые необходимо

выполнить, если

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

Страница 259

End End Sub

произойдет ошибка времени исполнения. Также можно использовать некоторые дополнительные операторы, такие, как 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

2. Программный код проекта показан на рис. 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

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

Страница 260

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)

LoopAllText = AllText & LineOfText & vbCrLf

T.Text = AllText : T.Enabled = True

Catch

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

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

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.Текстовыефайлы

Страница 261

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

Рис. 4.10.2-6

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

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

Ранее был рассмотрен доступ к файлам с помощью дескрипторов (номеров), который является средством VB. В данной версии VS предпочтительным и более эффективным является потоковый доступ к файлам, который является средством .NET Framework и определен в пространстве имен (библиотеке классов)System.IO.

Поток (Stream) в VS – это абстрактный тип Stream, который представляет последовательность байтов (символов), передаваемых в среду или из среды для хранения информации. Потоки позволяют считывать и записывать данные на запоминающее устройство, которое в нашем случае соответствует файлу. Поэтому над потоками в основном выполняются

операции чтения (Read),записи (Write)и поиска (Seek), которые реализованы в классе

System.IO.Stream. Причем большинство потоковых объектов выполняют буферизацию данных, которая позволяет значительно повысить эффективность операций ввода/вывода. Например, данные потока не записываются сразу на диск, когда производится запись в файл, а помещаются в буфер и затем сбрасываются на диск, когда поток закрывается.

Таким образом, потоки класса System.IO.Stream осуществляют управление файлами на уровне отдельных байтов. Чтобы сделать операции чтения и записи более эффективными и удобными, в пространстве имен System.IO имеются средства для открытия и отображения текстовых файлов. Так, например, имеются классы StreamReader и StreamWriter, а также

объект My.Computer.FileSystem.

Чтобы использовать классы StreamReader и StreamWriter, в начале программного кода следует добавить оператор доступа к этим классам: Imports System.IO.

Класс StreamReader

из библиотеки .NET Framework позволяет открывать в

программе и отображать на экране текстовые файлы. На рис. 4.10.3-1

и рис. 4.10.3-2

представлены процедуры

чтения содержимого всего текстового файла

целиком в одну

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

входной

параметр filename (имя файла) и выходной параметр p (строка,

содержащая

значения,

прочитанные из файла).

 

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

Страница 262

'Процедура чтения из текстового файла

Sub readfile1(ByVal filename As String, ByRef p As String)

'создание потока для чтения из текстового файла

Dim Rf As StreamReader

Rf = New StreamReader(filename)

Try p = Rf.ReadToEnd() 'чтение текста из файла в p

Rf.close() 'закрытие потока

Catch ex As Exception

MsgBox("Невозможно прочитать данные из файла")

End Try

End Sub

Рис. 4.10.3-1

'Процедура построчного чтения данных из текстового файла,

'подсчета числа строк и формирования строки для вывода данных

Sub readfile2(ByVal filename As String, _

ByRef n As Integer, ByRef p As String)

'создание потока для чтения из текстового файл

Dim Rf As New StreamReader(filename)

Dim line As String

p = "" 'строка с исходными данными n = 0 'количество строк в файле

Try Do While Not Rf.EndOfStream() 'пока не достигнут конец потока line = Rf.ReadLine() 'чтение строки из файла в line

n = n + 1

Loop p = p & line & vbNewLine

Rf.Close() 'закрытие потока

Catch ex As Exception

MsgBox("Невозможно прочитать данные из файла")

End Try

End Sub

Рис. 4.10.3-2

В примерах, представленных на рис. 4.10.3-1 и рис. 4.10.3-2, сначала создаются объекты Rf класса StreamReader потоки открываются для чтения. Далее применяются методы созданных классов: в примере на рис.4.10.3-1 метод ReadToEnd( )считывает всю информацию из файла в строковую переменную p, начиная с текущей позиции (в данном примере с начала файла) и до конца файла; в примере на рис. 4.10.3-2 метод ReadLine( )считывает из потока Rf только одну строку символов и присваивает ее содержимое строковой переменной line. Метод ReadLine( )здесь применяется в цикле, пока не будет достигнут конец потока (endOfStream).

Метод Close( ) закрывает поток Rf и освобождает все ресурсы, которые были связаны с этим объектом.

Класс StreamWriter из библиотеки классов .NET Framework позволяет создавать в программе новые текстовые файлы и записывать в них текстовые данные, а также добавлять текстовые данные в существующие текстовые файлы.

На рис. 4.10.3-3 и рис. 4.10.3-4 представлены процедура записи всей строки в заново созданный текстовый файл и процедура добавления строки в уже существующий файл. Обе процедуры в качестве входных параметров принимают filename(имя файла) и p( строка, содержимое которой записывается в файл).

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

Страница 263

Соседние файлы в папке УчеП-Раз-4-Инф-270100