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

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

Sub writefile1(ByVal filename As String, ByVal p As String)

'проверка существования текстового файла с таким же именем

If File.Exists(filename)Then

MsgBox("Файл "&filename " уже существует")

Exit Sub

 

End If

 

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

'1 способ

 

'Dim wf As StreamWriter = File.CreateText(filename)

'2 способ

 

Dim wf As New StreamWriter(filename)

wf.WriteLine(p) 'запись строки в файл

wf.Flush()

'очистка буфера потока

End Sub wf.Close()

'закрытие потока

Рис. 4.10.3-3

 

 

' Процедура добавления строки в уже существующий текстовый файл

 

' Если такого файла нет, то он создается

 

Sub writefile2(ByVal filename As String, ByVal p As String)

 

'проверка существования текстового файла с таким же именем

 

 

If File.Exists(filename) = False Then

 

 

MsgBox("Файл " & filename & " не существует")

 

 

End If

 

 

'создание потока wf для добавления строки в конец файла

 

'1 способ

 

 

 

'Dim wf As StreamWriter = File.AppendText(filename)

 

'2 способ

 

 

 

'Значение True 2-го параметра означает, что будет

 

'производиться дозапись в конец файла

 

 

Dim wf As New StreamWriter(filename, True)

 

 

wf.WriteLine(p) 'запись строки в файл

 

 

wf.Flush()

'очистка буфера потока

 

 

wf.Close()

'закрытие потока

 

End Sub

 

 

Рис. 4.10.3-4

 

При

создании

потока wf класса StreamWriter вторым способом может

использоваться второй аргумент, который определяет способ записи данных в файл. Если этот аргумент равен True, то строка p добавляется в конец файла к уже существующему содержимому. Если второй аргумент равен False или отсутствует, то все содержимое файла (если оно существует) полностью стирается, и с начала файла записывается строка p.

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

Пространство имен My по функциональности разделено на несколько категорий, которые приведены в таблице 4.10.3-1.

 

Таблица 4.10.3-1

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

Страница 264

Объект

Описание

 

 

 

 

My.Application

Информация, связанная с текущим приложением, включая

 

заголовок, директории, номер версии.

 

 

 

 

My.Computer

Информация об оборудовании, программном обеспечении и

 

файлах, имеющихся на текущем (локальном) компьютере.

 

My.Computer включает My.Computer.FileSystem, который ис-

 

пользуется для открытия текстовых файлов и зашифрованных

 

файлов системы.

 

 

 

 

My.Forms

Информация о формах текущего проекта Visual Studio.

 

 

My.User

Информация о текущем активном пользователе из

 

 

.

 

 

 

My.Computer

My.WebServices

Информация о веб-службах, активных в

My.Computer

,

и ме-

 

ханизм для доступа к новым веб-службам.

 

 

 

 

Кроме того, пространство имен My это просто способ быстрого доступа к элементам

.NET Framework, и все е го возможности можно увидеть в окне Программный код (CodeEditor) при помощи технологии IntelliSense. Например, чтобы отобразить окно сообщения, выводящее имя текущего компьютера и имя текущего пользователя, необходимо ввести:

MsgBox(My.User.Name)

Эта строка осуществляет вывод, соответствующий рис. 4.10.3-5.

Рис. 4.10.3-5

Объект My.Computer может отображать различную информацию о компьютере и его файлах. Например, следующий оператор отображает текущее системное время (локальная дата и время), определяемое компьютером:

MsgBox( My.Computer. Clock. LocalTime)

Чтобы открыть существующий текстовый файл и вывести его содержимое в объект текстового поля, можно использовать объект My.Computer.FileSystem и метод ReadAllText( ).Программный код будет иметь вид,как на рис. 4.10.3-6.

 

 

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

 

 

 

 

'целиком в одну строку и вывод данных в TextBox

 

 

 

 

Sub vvodFile(ByVal filename As String, _

 

 

 

 

ByRef Str As String, _

 

 

 

 

ByRef T As TextBox)

 

 

 

 

'Открываем существующий файл и загружаем его текстовое

 

 

 

 

'содержимое целиком в одну строку Str

 

 

 

 

Try

 

 

 

 

Str = My.Computer.FileSystem.ReadAllText(filename)

 

 

 

 

T.Text = Str

 

 

 

 

Catch ex As Exception

 

 

 

 

End Try MsgBox("ошибка при чтении файла")

 

 

 

 

End Sub

 

 

 

 

 

 

 

Рис. 4.10.3-6

Страница 265

 

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

 

Метод ReadAllText( )копирует все содержимое указанного текстового файла в строковую переменную или объект (в данном случае, строковую переменную с именем Str), что с точки зрения производительности и времени написания кода быстрее, чем чтение файла по одной строке с помощью функции LineInput( ).

Благодаря этому фактору, объект My.Computer.FileSystem предоставляет великолепный способ быстро запрограммировать часто встречающиеся задачи. Относительно этой новой функции и возможных способов ее применения важно отметить, что здесь объект My.Computer.FileSystem полезен потому, что читается весь текстовый файл. Однако функция LineInput( )и класс StreamReader предлагают больше возможностей, чем реализация объекта My, и особенно это касается возможности обрабатывать файлы построчно. Эта возможность является очень важной при выполнении сортировки и лексического разбора. Так что лучше всего знать все три метода открытия и создания текстовых файлов. Какой из них будет использоваться при программировании, зависит от решаемой задачи и того, как ваш код будет использоваться.

Чтобы создать новый или добавить данные в существующий текстовый файл можно использовать объект My.Computer.FileSystemи метод WriteAllText( ).Программный код будет иметь вид, как на рис. 4.10.3-7.

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

Sub vivodFile(ByVal filename As String, ByRef Str3 As String)

'Запись строки-результата Str3 в текстовый файл;значение False 'параметра задает,что файл будет перезаписан.

TryMy.Computer.FileSystem.WriteAllText(filename, Str3, False) Catch ex As Exception

MsgBox("ошибка при сохранении (создании) файла") End Try

End Sub

Рис. 4.10.3-7

В методе WriteAllText( )третий аргумент определяет способ записи данных. Если указать True, то данные добавляются в конец, существующих данных файла; если же указать False, то в случае существования каких-то данных в файле, они полностью заменяются новыми данными (файл перезаписывается).

Пример 4.10.3-1.Создать проект, в котором реализуются чтение и запись текстовых файлов средствами объекта My.Computer.FileSystem.

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

Данную проблему можно решить с помощью методов

My.Computer.FileSystem.WriteAllText ()

My.Computer.FileSystem.ReadAllText().

1.Создать новый проект Пример-4-10-3-1.

Поместите в форму два элемента управления TextBox с названиями TextBox1 и

TextBox2 и два элемента управления Button с названиями Button1 и Button2. Установить значение свойства Multiline текстового поля TextBox2 в True, а значение его свойства ScrollBars – в Both. По желанию можно добавить информационные подписи.

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

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

Страница 266

End Try End Sub

Рис. 4.10.3-8

2. Добавить следующий исходный код в класс формы (рис. 4.10.3-9).

Public Class Form1

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

ByVal e As System.EventArgs) Handles Button2.Click

' Записать в файл отредактированные данные

If (My.Computer.FileSystem.FileExists(TextBox1.Text) = True) Then

If (MsgBox("Файл уже существует. Переписать в него данные?", _

MsgBoxStyle.YesNo Or MsgBoxStyle.Question, _

"Переписать") <> MsgBoxResult.Yes) Then Exit Sub

End If

' Запись данных

Try My.Computer.FileSystem.WriteAllText(TextBox1.Text,TextBox2.Text,False) Catch ex As Exception

MsgBox("Данные в файл не могут быть переписаны из за "& _

" следующей ошибки:"& vbCrLf & vbCrLf & ex.Message) End Try

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click

' Открыть существующий фаайл и загрузить из него текст

Try TextBox2.Text = My.Computer.FileSystem.ReadAllText(TextBox1.Text) Catch ex As Exception

MsgBox("Файл не может быть открыт из-за "& _

" следующей ошибки:"& vbCrLf & vbCrLf & ex.Message)

End Class

Рис. 4.10.3-9

3. Запустить программу на выполнение, ввести путь к файлу в текстовое поле TextBox1 и нажать кнопку Открыть файл.

4.Изменить содержимое файла в текстовом поле TextBox2, после чего сохранить измененное содержимое, нажав кнопку Записать файл.

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

исключение генерирует экземпляр класса Exception, который помещается в переменную ex.

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

Страница 267

Из этой переменной можно взять текст сообщения об исключении, который в данном случае выводится в окно сообщения.

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

Многие приложения MS Windowsв процессе работы, кроме вывода результатов в элементы управления, например, в TextBox, требуют получение результатов работы программы на бумаге. В VB нет специальных операторов вывода на печать, а методы, используемые для организации печати, зависят от типа и количества генерированного вывода для печати. Причем во всех случаях основным механизмом для управления печати является класс PrintDocument, который может быть создан двумя способами:

добавлением на форму элемента управления PrintDocument;

определением в программном коде.

Класс PrintDocument включает несколько полезных объектов. Объект PrintSettings содержит настройки принтера по умолчанию, объект PageSettings содержит настройки печати для конкретной страницы, объект PrintPageEventArgs содержит информацию о событиях для печатаемой страницы. Так как класс PrintDocument определен на пространстве имен System.Drawing.Printting,то при его использовании в верхнюю часть кода формы

необходимо добавлять оператор Imports:

Imports System.Drawing.Printing

Для примера рассмотрим простейший случай печати текста из объекта TextBox, в котором класс PrintDocument определен в коде программы, а для отправки всего содержимого текстового поля на принтер по умолчанию будет использоваться метод Graphics.DrawString. Причем необходимо обратить внимание, что создаваемая программа позволяет печатать не более одной страницы текста. Чтобы напечатать несколько станиц, требуется существенно усложнить код программы.

Пример 4.10.4-1. Взяв за основу проект из примера 4.10.3-1, создать проект Пример4.10.4-1,в котором содержимое текстового файла считывается в TextBox2 и выводится на печать.

1. Добавим на форму проекта примера 4.10.3-1 элемент управления Button с именем Button3 и надписью Печать.

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

Рис. 4.10.4-1

Тема 4.10.Текстовыефайлы Страница 268

2. Добавить следующий исходный код в класс формы (рис. 4.10.4-2).

Imports System.Drawing.Printing

Public Class Form1

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

 

ByVal e As System.EventArgs) Handles Button1.Click

' Открыть существующий фаайл и загрузить из него текст

Try TextBox2.Text = My.Computer.FileSystem.ReadAllText(TextBox1.Text)

Catch ex As Exception

MsgBox("Файл не может быть открыт из за "& _

End Try

" следующей ошибки:"& vbCrLf & vbCrLf & ex.Message)

End Sub

 

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

ByVal e As System.EventArgs) Handles Button2.Click

' Записать в файл отредактированные данные

If (My.Computer.FileSystem.FileExists(TextBox1.Text) = True) Then

If (MsgBox("Файл уже существует. Переписать в него данные?", _

End If

MsgBoxStyle.YesNo Or MsgBoxStyle.Question, _ "Переписать") <> MsgBoxResult.Yes) Then Exit Sub

' Запись данных

Try My.Computer.FileSystem.WriteAllText(TextBox1.Text, _

TextBox2.Text, False)

Catch ex As Exception

MsgBox("Данные в файл не могут быть переписаны из за "& _

End Try

End Sub

" следующей ошибки:"& vbCrLf & vbCrLf & ex.Message)

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

ByVal e As System.EventArgs) Handles Button3.Click

Try Dim PrintDocument1 As New PrintDocument

AddHandler PrintDocument1.PrintPage, AddressOfMe.PrintText

PrintDocument1.Print()

Catch ex As Exception

MessageBox.Show("Проблемы печати", ex.ToString())

End Try

End Sub

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

ByVal pr As PrintPageEventArgs)

pr.Graphics.DrawString(TextBox2.Text, _

New Font("arial", 12, FontStyle.Regular), Brushes.Black, 100, 150) pr.HasMorePages = False

End Sub

EndClass

Рис. 4.10.4-2

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

Страница 269

В событийной процедуре SubButton3_Click( )определена переменная PrintDocument1, которая представляет объект PrintDocument и используется для объявления обработчика ошибок и печати текстового документа.

В этой процедуре использется оператор AddHandler, который указывает, что когда возникает событие PrintPage (Печать страницы) объекта PrintDocument1, должен вызываться обработчик событий PrintText. Технически, для указания обработчика события PrintText используется оператор AddressOf, который при возникновении события передает вызовы в соответствующий обработчик событий – процедуру PrintText. Эта процедура обрабатывает событие печати, генерируемое методом

PrintDocument1.Print. В конце этой процедуры свойство pr.HasMorePage

устанавливается в значение False, чтобы указать, что выводимая страница последняя. 3. Запустить программу на выполнение.

Ввести путь к файлу в текстовое поле TextBox1 и нажать кнопку Открыть файл. В текстовом поле TextBox2 отобразится содержимое текстового файла.

Нажать кнопку Печать.

На текущий принтер будет выдано содержимое текстового поля TextBox2.

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

Страница 270

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

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

1)

Определить, является ли последовательность символов, находящаяся в текстовом

 

файле, идентификатором, если нет исправить и записать обратно в файл.

 

2)

Подсчитать количество сдвоенных символов 'ее', 'нн', 'лл' в тексте, расположенном

 

в текстовом файле, затем уд алить повторяющийся символ и полученную строку

 

записать обратно в файл.

 

3)

Разбить произвольный текст, находящийся в файле, на строки определенной

 

длины. При переносе слова предусмотреть вывод дефиса. Полученную строку

 

сохранить в файле.

 

4)

Подсчитать числослов в предложении, записанном в текстовом файле.

 

5)

Найти в текстовом файле самое длинное и самое короткое слово.

 

6)

Из строки, расположенной в текстовом файле, исключить все символы, входящие в

 

нее более одного раза.Полученную строку сохранить в файле.

 

7)

Проверить, правильно ли расставлены в тексте, расположенном в текстовом файле,

 

круглые скобки.Если неправильно – исправить, а результат сохранить в файле.

8)

В последовательности символов, заданной в текстовом файле, подсчитать общее

9)

количество символов '+','-', '*'.

 

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

10)

виде столбика.

 

В текстовом файле, в предложении, содержащем не менее двух слов, поменять

 

местами первое и последнее слово, а затем результат сохранить в файле.

 

11)

В текстовом файле две строки текста. Необходимо сформировать третью строку,

 

состоящую из символов, входящих одновременно в обе исходные строки, и

 

дописать ее в текстовый файл.

 

12)

Откорректировать текст, расположенный в текстовом файле, заменив в нем все

13)

вхождения одной буквы на другую.

 

Переписать текстовый файл таким образом, чтобы все слова исходного текста были

14)

перевернуты.

 

В произвольный текстовый файл добавить в конец первое и третье слово из

15)

исходного текста.

 

В произвольный текстовый файл добавить в конец свою фамилию.

 

16)

В исходном текстовом файлеXзаменить все вхожденияподстроки Рна подстроку Q,

17)

Для заданного символа определить, сколько раз он встречается во введенном тексте

18)

файла.

 

Из текста, расположенного в файле, исключить группы символов, расположенных

19)

между круглыми скобками.

 

Из текста, расположенного в файле, исключить однобуквенные слова. Результат

20)

записать в другой файл.

 

Из текста, расположенного в файле, удалить лишние пробелы, разделяющие слова.

21)

Дан текстовый файл, содержащий целые числа. Найти сумму четных элементов

22)

в каждой строке и дописать их в конец файла.

 

Дан текстовый файл, содержащий целые числа. Найти количество

 

отрицательных элементов в каждой строке.

Страница 271

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

23)Дан текстовый файл, содержащий целые числа. Найти номер минимального элемента в каждой строке.

24)Дан текстовый файл, содержащий целые числа. Найти номер первого (слева направо) четного элемента в каждойстроке.

25)Дан текстовый файл, содержащий целые числа. Найти среднее арифметическое положительных чисел в файле.

26)Дан текстовый файл, содержащий целые числа. Найти разность между максимальным и минимальным числом в файле.

27)Даны два текстовых файла. Записать в третий только те строки, которые есть и в первом и во втором файлах.

28)Дан текстовый файл. Дописать в него следующие данные: количество строк, количество символов в каждой строке, количество цифр в каждой строке.

29)Даны два текстовых файла. Поменять содержимое файлов.

30)Разработать процедуру копирования текстового файла в другой файл, при этом каждая строка должна циклически сдвигаться вправо на п символов. Пример циклического сдвига строки abcdefqwrt на 3 символа, результат - wrtabcdefq.

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

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

Страница 272

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

1.Файл – это

1)поименованная совокупность данных, размещенных на ВЗУ и хранимая, пересылаемая и обрабатываемая как единое целое

2)поименованная совокупность данных, размещенных в памяти компьютера и хранимая, пересылаемая и обрабатываемая как единое целое

3)совокупность данных, размещенных на ВЗУ и хранимая, пересылаемая и обрабатываемая как единое целое

4)поименованная совокупность данных, размещенных на ВЗУ

2.Каталог файла – это

1)оглавление файла

2)директория файла

3)папка файла

4)нет правильного ответа

3.Директория файла – это

1)оглавление файла

2)каталог файла

3)папка файла

4)нет правильного ответа

4.Драйвер файловой системы – это

1)программа ОС, обеспечивающая доступ к информации по имени файла

2)программа ОС, обеспечивающая доступ к информации, записанной на внешний магнитный носитель, по имени файла

3)программа ОС, обеспечивающая доступ к информации, записанной в памяти компьютера, по имени файла

4)программа ОС, обеспечивающая доступ к информации по имени класса

5.По способу доступа к данным различаются файлы

1)последовательного, произвольного, двоичного

2)поточного, произвольного, двоичного

3)последовательного, произвольного, текстового

4)последовательного, произвольного, битого

6.Текстовые файлы – это

1)последовательные файлы, состоящие из записей переменной длины и расположенные на внешнем носителе

2)файлы произвольного доступа, состоящие из записей переменной длины и расположенные на внешнем носителе

3)последовательные файлы, состоящие из записей постоянной длины и расположенные на внешнем носителе

4)последовательные файлы, состоящие из записей переменной длины и расположенные в памяти компьютера

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

Страница 273

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