Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







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





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

· процедуры-функции с необходимыми формальными параметрами, которая получает строку и переставляет ее символы в обратном порядке;

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

· событийной процедуры, в которой осуществляется ввод имен файлов и вызов разработанных ранее процедур и функций.

 

Форма разрабатываемого приложения представлена на рис. 4.10.3-1.

На первом этапе необходимо создать процедуру-функцию Perevorot(), которая, получив через параметр строку s, с помощью регулярного цикла с отрицательным шагом записывает в новую строку temp все символы исходной строки s и возвращает созданную строку temp в качестве результата.

На втором этапе необходимо создать процедуру-подпрограмму Resh(), которой через параметры передаются две строки, с именами исходного и нового файлов. В Resh() необходимо создать два потоковых объекта: Rf – типа StreamReader, служащий для чтения исходного файла, и wf – типа StreamWriter, необходимый для записи в новый файл.

 

 

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

 

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

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



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

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


 

'Дан текстовый файл. 'Слова в строках файла разделены одним или несколькими пробелами. 'В каждой строке файла перевернуть слова наоборот и 'записать в новый текстовый файл через один пробел 'Потоковый способ построчно Option Strict On Option Explicit On Imports System.IO Public Class Form1 'функция переворачивает строку наоборот Function Perevorot(ByVal s As String) As String Dim temp As String = "" Dim L As Integer = s.Length For i As Integer = L - 1 To 0 Step -1 temp = temp + s.Substring(i, 1) Next Return temp End Function 'процедура удаления из строки лишних пробелов 'чтобы слова разделялись только одним пробелом Sub DelProb(ByRef s As String) s = s.Trim Do While s.IndexOf(Space(2)) >= 0 s = s.Replace(Space(2), Space(1)) Loop End Sub Sub Resh(ByVal filename1 As String, _ ByVal filename2 As String,_ ByRef Lb1 As ListBox, ByRef Lb2 As ListBox) 'создание потока для чтения из исходного текстового файла Dim Rf As New StreamReader(filename1) 'создание потока для записи в другой текстовый файл 'Значение True 2-го параметра означает, что будет 'производиться дозапись в конец файла Dim wf As New StreamWriter(filename2, True) Dim line1, line2, slovo As String Dim Mas() As String Try Do While Not Rf.EndOfStream() 'пока не достигнут конец потока line1 = Rf.ReadLine() 'чтение строки из 1 файла в line1 Lb1.Items.Add(line1) 'вывод прочитанной строки line1 в ListBox DelProb(line1) 'удаление из строки line1 лишних пробелов Mas = Split(line1, " ") 'разбиваем строку line1 на массив слов line2 = ""'новая строка для записи в другой файл For i As Integer = 0 To Mas.Length - 1 slovo = Mas(i)'один элемент массива - это слово 'перевернули слово и снова записали в массив Mas(i) = Perevorot(slovo) Next 'склеили массив перевернутых слов в строку line2, 'разделив слова одним пробелом line2 = Join(Mas, " ") wf.WriteLine(line2)'запись строки line2 во 2 файл Lb2.Items.Add(line2)'вывод строки line2 в ListBox Loop Catch ex As Exception MsgBox("Невозможно прочитать данные из файла") Finally wf.Flush()'очистка буфера потока Rf.Close()'закрытие потока wf.Close() End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim filename1 As String = "", filename2 As String = "" filename1 = TextBox1.Text filename2 = TextBox2.Text Resh(filename1, filename2, ListBox1, ListBox2) End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) End End Sub End Class

 

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

 

Пример 4.10.3-2. Задан текстовый файл, каждая строка которого содержит только слова из русских букв, разделенных одним или несколькими пробелами. Написать программный код четырех процедур:

· процедуры-функции Perevorot() с необходимыми параметрами, которая получает строку и переставляет ее символы в обратном порядке;

· процедуры-подпрограммы Reshenie(), с необходимыми параметрами, которая считывает текст из файла с помощью объекта My.Computer.FileSystem, и для каждой строки исходного файла переворачивает каждое слово наоборот с использованием процедуры-функции и записывает в новую строку через один пробел по отдельности перевернутые слова исходной строки;

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

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

 

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

Первое задание реализует процедура-функция Perevorot(), которая, получив через формальный параметр по значению строку s, с помощью регулярного цикла с отрицательным шагом записывает в новую строку temp все символы исходной строки s и возвращает созданную строку temp в качестве результата.

Второе задание реализует процедура Reshenie(), которой через формальные параметры передается строка filename, содержащая имя исходного файла, и по ссылке возвращаются строка s1с исходным файлом и строка s2 с перевернутыми словами, которую надо будет записать в новый файл. В ней сначала с помощью объектаMy.Computer.FileSystem весь исходный файл считывается целиком в одну строку s1, затем полученная строка с помощью метода Split() разбивается на массив строк Stroki() по признаку конца строки (vbNewLine). Далее во внешнем цикле из каждой строки исходного файла с помощью процедуры DelProb()удаляются лишние пробелы, и строка разбивается на массив слов slova() по признаку одного пробела. Во внутреннем цикле каждое слово переворачивается наоборот с использованием процедуры-функции Perevorot()и записывается в новую строку s2 через один пробел. После завершения внутреннего цикла в новую строку s2 добавляется признак конца строки (vbNewLine) для разделения строк в новом файле, и далее повторение внешнего цикла для обработки очередной строки исходного файла.

Третье задание реализует процедура vivodFile(), которой через параметры передается строка filename, содержащая имя нового файла, и строка Sс перевернутыми словами для записи в новый файл.

 

Option Strict On Option Explicit On Public Class Form1 'функция переворачивает строку наоборот Function Perevorot(ByVal s As String) As String Dim temp As String = "" Dim L As Integer = s.Length For i As Integer = L - 1 To 0 Step -1 temp = temp + s.Substring(i, 1) Next Return temp End Function 'процедура удаления из строки лишних пробелов 'чтобы слова разделялись только одним пробелом Sub DelProb(ByRef s As String) s = s.Trim Do While s.IndexOf(Space(2)) >= 0 s = s.Replace(Space(2), Space(1)) Loop End Sub 'Процедура чтения данных из текстового файла целиком в строку 's1 и формирования новой строки s2 для записи в новый файл Sub Reshenie(ByVal filename As String, ByRef s1 As String, _ ByRef s2 As String) Dim line, OdnoSlovo As String Dim Stroki() As String'массив строк исходного файла Dim slova() As String'массив слов одной строки исх.файла s2 = ""'новая строка с перевернутым файлом 'Открытие существующего файла и загрузка его текстовое 'содержимое целиком в одну строку s1 Try s1 = My.Computer.FileSystem.ReadAllText(filename) Stroki = s1.Split(CChar(vbNewLine)) 'массив строк исходного файла For i As Integer = 0 To Stroki.Length - 1 line = Stroki(i)'одна строка исходного файла DelProb(line)'удалили лишние пробелы slova = line.Split(CChar(" ")) 'разбили ее на массив слов For j As Integer = 0 To slova.Length - 1 OdnoSlovo = Perevorot(slova(j)) s2 = s2 + OdnoSlovo + " " Next s2 = s2 + vbNewLine Next Catch ex As Exception MsgBox("Файл не может быть открыт из-за " & _ " следующей ошибки:" & vbNewLine & vbCrLf & _ ex.Message) End Try End Sub 'Процедура записи строки в текстовый файл Sub vivodFile(ByVal filename As String, ByVal S As String) 'Запись строки-результата S в текстовый файл (False) Try My.Computer.FileSystem.WriteAllText(filename, S, False) Catch ex As Exception MsgBox("ошибка при сохранении (создании) файла") MsgBox("Данные в файл не могут быть переписаны из-за" _ & " следующей ошибки:" & vbNewLine & ex.Message) End Try End Sub Private Sub Button1_Click(...) Dim filename1, filename2 As String Dim OldStr, NewStr As String filename1 = TextBox1.Text filename2 = TextBox2.Text Reshenie(filename1, OldStr, NewStr) vivodFile(filename2, NewStr) TextBox3.Text = OldStr TextBox4.Text = NewStr End Sub End Class

 

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

 


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

 

1. Файл – это

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Работа с файлом состоит из этапов

1) открытия, чтения или записи информации, закрытия

2) открытия, записи информации, закрытия

3) открытия, чтения, закрытия

4) открытия, , закрытия

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

5. В Vb возможны следующие способа доступа к текстовым файлам

1) с использованием методов класса System.IO

2) с использованием объекта My.Comhuter.System

3) с использованием потоков

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

6. Метод ReadLine( )

1) требует предварительного создания потока

2) не требует предварительного создания потока

3) требует предварительного открытия файла с помощью дескриптора

4) требует указания пути к текстовому файлу


 

7. Метод ReadToEndLine( )

1) требует предварительного создания потока

2) не требует предварительного создания потока

3) требует предварительного открытия файла с помощью дескриптора

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

1) Dim t As New StreamWriter("f[le1.txt", True)

2) Dim t As New StreamWriter("f[le1.txt", False)

3) Dim t As StreamWriter("f[le1.txt")

4) все ответы верны

9. Метод ReadAllText( ) применяется

1) только при работе с объектом My.Computer.FileSystem

2) при работе с потоковым вводом-выводом

3) при работе с дескриптором

10. Метод WriteAllText( )

1) может добавить данные в конец существующего файла или полностью перезаписать весь файл

2) можно только добавить данные в конец существующего файла

3) можно вывести все данные из файла на экран монитора

11. Ошибочной записью оператора является

1) StreamWriter.WriteAllText("Hello")

2) My.Computer.FileSystem.WriteAllText("file1.txt","Hello", False)

3) My.Computer.FileSystem.WriteAllText("file1.txt", "Hello", True)

4) нет верного ответа

12. Метод WriteAllText( )

1) имеет 3 аргумента

2) имеет 2 аргумента

3) имеет 1 аргумента

4) может иметь 1, 2 или 3 аргумента

5) нет верного ответа

13. Метод ReadAllText( )

1) имеет 3 аргумента

2) имеет 2 аргумента

3) имеет 1 аргумента

4) может иметь 1, 2 или 3 аргумента

5) нет верного ответа

14. Метод ReadToEnd( )считывает из файла

1) всю информацию (все строки символов файла) *

2) очередной символ или null, если больше символов нет

3) только одну строку

4) код символа или 0, если больше символов нет


 

15. Метод ReadLine( )считывает из файла

1) всю информацию (все строки символов файла)

2) очередной символ или null, если больше символов нет

3) только одну строку символов*

4) код символа или 0, если больше символов нет

16. При достижении конца символьного потока метод ReadLine() вернет значение

1) -1

2) 0

3) null

4) EndOfStream

17. Метод Length при обращении к потоку FileStream определит количество:

1) бит в потоке

2) +: байт в потоке

3) значений некоторого типа в потоке.

18. Если файл с именем filename.txt не существует, то при попытке выполнить следующую процедуру

Sub readfile1(ByVal filename As String, ByRef p As String) Dim Rf As StreamReader Rf = New StreamReader(filename) Try p = Rf.ReadToEnd() : Rf.close() Catch ex As Exception MsgBox("Невозможно прочитать данные из файла") End Try End Sub

1) открывается файл с именем filename.txt и читаются все данные

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

3) генерируется исключение FileNotFoundException

4) генерируется исключение IOException


 

19. В результате выполнения процедуры

Sub writefile1(ByVal filename As String, ByVal p As String) If File.Exists(filename)Then MsgBox("Файл " & filename & " уже существует") Exit Sub End If Dim wf As New StreamWriter(filename) wf.WriteLine(p): wf.Close() 'закрытие потока End Sub

1) создается, открывается файл с именем filename.txt и происходит запись всей строки*

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

3) генерируется исключение FileNotFoundException

4) генерируется исключение IOException

5) открывается файл filename.txt и происходит запись всей cтроки

20. В результате выполнения процедуры записи строки, при условии что файл уже существует

Sub writefile1(ByVal filename As String, ByVal p As String) If File.Exists(filename)Then MsgBox("Файл " & filename & " уже существует") Exit Sub End If Dim wf As StreamWriter= File.CreateText(filename) wf.WriteLine(p) : wf.Close() End Sub

1) создается, открывается файл filename.txt и происходит запись всей строки

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

3) генерируется исключение FileNotFoundException

4) генерируется исключение IOException

5) выводится сообщение, что файл уже существует*


21.









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


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