Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Создание приложений с потоковыми файлами





Тема 10

Создание приложений с потоковыми файлами

 

 

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

 

 

Использование классов StreamReader, StreamWriter и объекта My.Computer.FileSystem для работы с текстовыми файлами

 

 

Примеры создания проектов (приложений),

Работающих с потоковыми файлами

 

 

4.10.6. Тестовые задания

 

 

Лабораторная работа по теме «Создание приложений, работающие с потоковыми файлами»

 

 

4.10.7.1. Контрольные вопросы

 

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

 

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

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

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

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

Текстовые файлы состоят из одной или более строк, слов или симво­лов. Обычные текстовые файлы определены в MS Windows как Текстовые документы и имеют расширение *.txt.

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

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

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

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

 

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

Поток для работы может быть отрыт в текстовом или бинарном режиме. С потоками можно производить следующие действия: открывать и закрывать потоки; посылать данные в поток и получать данные из потока; анализировать ошибки потокового ввода-вывода; управлять буферизацией потока и размером буфера; позиционировать указатель чтения-записи данных в потоке (если возможно). Все потоки и методы для работы с ними связаны с понятием файл.

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

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

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

Класс Stream (Поток, Абстрактный файл) – абстрактный класс, который является базовым для чтения и записи байтов в некоторое хранилище данных типа файла. Этот класс поддерживает синхронные и асинхронные чтение и запись. Асинхронные методы обсуждаются ниже в данной главе.

Класс FileStream, который является производным от класса Stream, предоставляет операции чтения и записи последовательности байтов в файл. Конструктор FileStream создает экземпляр потока. Перегруженные методы класса Stream (Поток, Абстрактный последовательный файл) осуществляют чтение и запись в файл.

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

· с использованием методов класса System.IO библиотеки
Framework.NET;

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

 

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

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

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

Ошибка времени исполнения возникает тогда, когда 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) Понятие файла. Особенности работы с текстовыми файлами.

2) Основные операторы VB для работы с текстовыми файлами.

3) Средства обработчика ошибок времени исполнения.

4) Классы и объекты VB для работы с текстовыми файлами.

5) Использование классов StreamReader, StreamWriter и объекта My.Computer.FileSystem для работы с текстовыми файлами.

 

4.10.7.2. Общее задание на разработку проекта

 

1) Изучите вопросы создания приложений, работающие с потоковыми файлами (Тема 10).

2) Создайте приложение с именем Проект-10.

3) Выберите вариант задания из таблицы по усмотрению преподавателя.

4) Создайте с помощью стандартной программы Microsoft Windows «Блокнот» текстовый файл из 5-7 строк с исходными данными, соответствующими варианту задания.

5) Разработайте интерфейс пользователя, предусмотрев в нем несколько кнопок: для ввода данных из текстового файла, для обработки данных, для вывода результата в текстовый файл.

6) Напишите программный код процедуры пользователя для обработки текстового файла, которая должна вызывать процедуру обработки заданной строки (см. вариант задания лабораторной работы № 9), а также процедур для чтения и записи данных в/из текстового файла. Обмен данными между пользовательскими процедурами должен осуществляться через параметры, без глобальных переменных.

7) Разработайте проект, с помощью которого можно осуществить ввод исходных данных из текстового файла и отобразить их на форме, а затем обработать в соответствии с индивидуальным заданием.

8) Допишите программный код проекта, в котором событийные процедуры должны содержать только операторы вызова пользовательских процедур.

9) Выполните приложение и получите результат.

10) Докажите правильность результата.

Варианты индивидуальных заданий

 

1) В текстовом файле найти строку, содержащую наибольшее количество цифр, идущих подряд.
2) Зашифровать каждую строку текстового файла, содержащего русские буквы, пробелы и знаки препинания: заменить каждую букву, непосредственно следующей за ней по алфавиту ("я" на "а"), строчную букву преобразовать в прописную, прописную - в строчную.
3) В текстовом файле найти строку, содержащую наибольшее количество слов, начинающихся и заканчивающихся на одну и ту же букву
4) В текстовом файле найти строки, в которых не было ни одной замены каждого третьего слова «мама» на слово «мамочка».
5) Из каждой строки текстового файла удалить все символы, входящие в нее более одного раза и найти самую короткую строку - результат.
6) Преобразовать каждую строку текстового файла, повторив в ней каждый символ, совпадающий с заданным и найти самую длинную строку - результат.
7) Записать в новый файл те строки исходного текстового файла, из символов которых можно составить вашу фамилию.
8) В каждой строке текстового файла определить максимальную длину подстроки, состоящей из заданного символа и найти их сумму.
9) Исключить из каждой строки текстового файла группы символов, расположенных между круглыми скобками, включая сами скобки. Предполагается, что внутри каждой пары скобок нет других скобок. Найти самую длинную строку – результат.
10) В текстовом файле найти строку, содержащую наименьшее количество слов четной длины, в которых нет буквы «а».
11) Записать в новый файл те строки исходного текстового файла, в которых нет ни одного слова, содержащего ровно три буквы «а».
12) В каждой строке текстового файла определить самое длинное слово нечетной длины и записать их в новый файл.
13) В текстовом файле найти строку, содержащую самое короткое слово четной длины.
14) Каждая строка текстового файла содержит дату в формате "mm-dd-yyyy", где mm - месяц, dd - день, yyyy - год. Записать в новый файл только те строки исходного текстового файла, которые содержат корректно заданные даты, изменив их формат на "dd.mm.yy", где yy - две последние цифры года.
15) Из каждой строке текстового файла, не содержащей цифр, получить "сжатую" строку, заменив самую длинную подстроку вида "XXX…XX" на подстроку вида "nX", где X - повторяющийся символ, n - число его повторений и записать в новый файл только измененные строки.
16) Записать в новый файл те строки исходного текстового файла, которые нельзя преобразовать в число.
17) Из каждой строки текстового файла получить новую строку, записывая каждый символ исходной строки только один раз.
18) В каждой строке текстового файла подсчитать сумму цифр и найти строку с наименьшей суммой.
19) В текстовом файле, не содержащем букв русского алфавита, найти строку с максимальным процентом гласных букв (a, e, i, o, u, y).
20) Записать в новый файл те строки исходного текстового файла, в которых самое длинное слово встречается раньше, чем самое короткое слово.
21) Преобразовать каждую строку текстового файла, удалив из каждого слова нечетной длины средний символ, и найти строку с минимальным количеством удалений.
22) В текстовом файле найти строку, содержащую наибольшее количество симметричных слов, т.е. читающихся одинаково слева направо и справа налево.
23) Записать в новый файл те строки исходного текстового файла, которые являются записью вещественного числа с нулевой дробной частью.
24) Для каждой строки текстового файла, содержащей корректно заданную дату в формате "dd.mm.yy", где dd - день, mm - месяц, yy - год, получить строку с датой, отстоящей от заданной на n дней вперед, в том же формате и записать в новый файл.
25) Записать в новый файл те строки исходного текстового файла, символы которых расположены в алфавитном порядке.
26) Записать в новый файл те строки исходного текстового файла, которые являются записью целого числа.
27) Записать в новый файл те строки исходного текстового файла, в которых нет n-ого с конца вхождения заданного символа.
28) Преобразовать каждую строку текстового файла, состоящую из "слов" длиной менее 10 символов и разделенных запятыми, заменив запятые группами пробелов так, чтобы каждое слово начиналось с позиции 10*(k - 1) + 1, где k - номер "слова".
  Преобразовать каждую строку текстового файла, вставив в середину каждого слова четной длины букву «К» и найти строку с максимальным количеством вставок.
30) Для каждой строки текстового файла, содержащей корректно заданную дату в формате "dd.mm.yy", где dd - день, mm - месяц, yy - год, получить строку с датой, отстоящей от заданной на n дней назад, в том же формате и записать в новый файл.

 

 

Содержание отчёта

 

1) Тема и название лабораторной работы;

2) Фамилия, имя студента, номер группы, номер варианта.

3) Задание на разработку проекта.

4) Формализация и уточнение задания.

5) Элементы, разрабатываемого проекта:

5.1) графический интерфейс пользователя;

5.2) таблица свойств объектов;

5.3) схема алгоритма решаемой задачи;

5.4) программный код проекта.

6) Результаты выполнения проектов.

7) Доказательство правильности работы программы.

4.10.7.5. Первый пример выполнения задания

 

1) Тема и название лабораторной работы:

Работа с текстовыми файлами;

Чтение и запись информации из файла/в файл с помощью объекта My.Computer.FileSystem.

2) Фамилия, имя студента, номер группы, номер варианта:

Иванов И., БИН1405, вариант 13.

3) Задание на разработку проекта:

Создайте проект, который реализует ввод из файла строк a и b, отображает их на форме, а затем обрабатывает, удаляя из строки a все символы, входящие в строку b и расположенные на нечетных позициях строки b. Используйте разработанную для лабораторной работы 9 процедуру Обработка().

Результат обработки вышеприведенной задачи необходимо отобразить на форме и перезаписать в первый текстовый файл. Работу с текстовыми файлами осуществить с помощью объекта My.Computer.FileSystem.

4) Формализация и уточнение задания:

Формализация не требуется.

 

 

5) Элементы, разрабатываемого проекта:

5.1) Графический интерфейс пользователя:

Форма приложения представлена на рис. 4.10.7-1.

 

 

Рис. 4.10.7-1. Форма проекта Проект 10-1

 

5.2) Таблица свойств объектов:

Для вывода на форму текстового файла, состоящего из нескольких строк, используются текстовые поля TextBox3 и TextBox5, для которых свойство Multiline должно быть установлено в состояние True. Кроме того, требуется установить для этих полей свойство ScrollBars в состояние Vertical для обеспечения возможности вертикальной прокрутки содержимого текстовых полей. Текстовое поле TextBox4, предназначенное для вывода на форму только одной строки из второго файла может оставаться со значением свойства Multiline, равным False, так же, как и два других текстовых поля TextBox1 и TextBox2, служащие для ввода путей к текстовым файлам.

Определите, установите и сведите в табл. свойства объектов

самостоятельно.

5.3) Схема алгоритма решаемой задачи:

Схемы отдельных алгоритмов представлены в Теме 4.10.

5.4) Программный код проекта:

Программный код проекта представлен на рис. 4.10.7-2.


 

Public Class Form1 'Глобальные строки Dim Str1 As String 'строка с исходным первым файлом Dim Rez As String 'строка с измененным первым файлом ' Процедура записи строки в файл. Sub Запись(ByVal ПутьФ As String, ByVal str1 As String) If (My.Computer.FileSystem.FileExists(ПутьФ)=True) Then If (MsgBox("Файл существует. Переписать?", _ MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "Overwrite")_ <> MsgBoxResult.Yes) Then Exit Sub End If ' Сохраняем данные Try My.Computer.FileSystem.WriteAllText(ПутьФ, str1,False) Catch ex As Exception MsgBox("Файл не может быть записан на диск " & _ "из-за ошибки:" & vbCrLf & vbCrLf & ex.Message) End Try End Sub 'Процедура чтения данных из файла целиком в одну строку Sub Чтение(ByRef Str3 As String, ByVal filename As String) ' Открываем существующий файл и загружаем его в одну строку Try Str3 = My.Computer.FileSystem.ReadAllText(filename) Catch ex As Exception MsgBox("Файл не может быть открыт " & _ " из-за ошибки:" & vbCrLf & vbCrLf & ex.Message) End Try End Sub 'Процедура обработки одной строки (удаления символов из строки) Sub Обработка(ByVal b As String, ByRef a As String) Dim d, m, i, j As Short m = CShort(a.Length) 'длина строки a d = CShort(b.Length) 'длина строки b For i = 0 To CShort(d - 1) Step 2 'перебор нечетных симв. строки b j = 0 Do While j < m 'перебор всех символов строки a If a.Substring(j, 1) = b.Substring(i, 1) Then a = a.Remove(j, 1) 'пока символы совпадают - удаляем из a m = CShort(m - 1) 'уменьшаем длину строки a Else j = CShort(j + 1) 'переход к следующемусимволу строки a End If Loop Next i End Sub 'Процедура решения задачи удаления символов из строк файла Sub Resh(ByVal b As String, ByVal s1 As String, _ ByRef s2 As String) Dim a As String Dim Stroki() As String 'массив строк первого файла Stroki = Split(s1, vbNewLine) 'Разбиваем строку с первым файлом ' на массив строк по признаку конца строки s2 = "" ' новая строка для нового файла целиком For i As Integer = 0 To Stroki.Length - 1 a = Stroki(i) ' одна строка первого файла Обработка(b, a) ' удаление символов из строки 'собираем измененные строки первого файла в 'одну строку s2 s2 = s2 + a + vbNewLine Next End Sub Function vvod(ByVal T As TextBox) As String Return T.Text End Function Sub vivod(ByVal z As String, ByRef t As TextBox) If z.Length <> 0 Then t.Text = z Else t.Text = "Все удалено" End If End Sub Private Sub Button1_Click(sender As Object, _ e As EventArgs) Handles Button1.Click Dim ПутьФ1 As String = "" ПутьФ1 = vvod(TextBox1) Чтение(Str1, ПутьФ1): vivod(Str1, TextBox3) End Sub Private Sub Button2_Click(sender As Object, _ e As EventArgs) Handles Button2.Click Dim Str2 As String = "" Dim ПутьФ2 As String = "" ПутьФ2 = vvod(TextBox2): Чтение(Str2, ПутьФ2) vivod(Str2, TextBox4) Resh(Str2, Str1, Rez): vivod(Rez, TextBox5) End Sub Private Sub Button3_Click(sender As Object, _ e As EventArgs) Handles Button3.Click Dim ПутьФ As String = "" ПутьФ = vvod(TextBox1): Запись(ПутьФ, Rez) End Sub Private Sub Button4_Click(sender As Object, _ e As EventArgs) Handles Button4.Click End End Sub End Class

 

Рис. 4.10.7-2. Программный код проекта Проект 10-1

 

Программный код, решаемой задачи содержит процедуры vvod(),
vivod(), Обработка(), Resh(), Чтение()
и Запись(). Так как разработанный интерфейс имеет не одну, а несколько кнопок, которые работают со строками, содержащими первый файл (Str1 – для исходного файла и Rez – для измененного файла), то эти строки должны быть доступны нескольким событийным процедурам, поэтому в программном коде их необходимо сделать глобальными (видимыми) для всех процедур, и объявить в начале программы, до работы всех процедур.

Тема 10

Создание приложений с потоковыми файлами

 

 

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

 

 







Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.