Лабораторная работа № 4
Тема. Работа с файлами
Вариант №1
Задание: С помощью программных средств VBA разработать программу, считывающую из заранее созданного текстового файла фрагмент текста объемом 300 - 400 символов, содержащий буквы русского алфавита, цифры, знаки пунктуации и пробел. Текст должен быть представлен в отдельном окне с переносом информации на новую строку только в позиции пробела.
Программа должна проанализировать выводимый текст и отдельно вывести удовлетворяющие заданному варианту слова и их количество.
Отдельно вывести и подсчитать слова, содержащие нечетное число гласных и четное число согласных букв.
Пояснения: Алгоритм для данной задачи состоит в следующем:
Сначала создаётся текстовый файл (тип txt) для внесения исходных данных и заполняется текстом.
Потом этот файл закрывается и сразу открывается вновь для извлечения из него нужной информации. Параллельно создается файл для хранения результатов обработки информации из первого файла.
Начинаем считывать по одной строке из файла с данными, пока не дойдем до конца файла. Считываемые строки сохраняются в строковую переменную через пробел.
Далее, так как нам не нужны лишние пробелы, а так же знаки препинания и цифры (знаки препинания говорят о конце слова и в слово не входят, а цифры не являются буквами, и обычно используются отдельно от слов, например «261 вагон»), то мы удаляем их из полученной строки.
Определив длину преобразованной строки, начинаем ее обрабатывать исходя из условия задания:
Просматриваем все символы от 1 до последнего.
Вводим вспомогательные строковые переменные для гласных и согласных букв.
Отцепив первый символ, сравниваем его с пробелом (пробел свидетельствует о конце слова). Если символ не пробел, то прицепляем его к переменной, созданной для получения отдельных слов. Параллельно сцепляем в одну вспомогательную переменную только гласные буквы слова, а в другую только согласные. Так до тех пор, пока не соберем первое слово. В этом же цикле подсчитываем количество гласных и согласных букв слова и увеличиваем счетчик букв основной строки на 1 после просмотра каждой отдельной буквы.
Когда первое слово получено, мы проверяем четно или нечетно количество гласных и согласных букв слова. Если гласных нечетное количество, а согласных – четное, то мы подсчитываем это слово в счетчик подходящих слов и выводим отдельной строкой в файл результата.
Просмотрев и обработав слово, мы «прокручиваем» пробелы.
Переходим к следующему слову, повторяя действия 1-4.
В файл результата выводим текст о количестве подходящих слов.
Когда все слова обработаны, закрываем все файлы и открываем их вновь через Word для просмотра.
Текст программы:
Sub var1()
Dim fname1 As String
Dim fname2 As String
Dim s, s1, p, pglas, psoglas As String
Dim i, j, t, k, n, n2, n3 As Integer
Dim retval
fname1 = "C:\var1_ishoddannie.txt" 'Полное имя файла с исходными данными
fname2 = "C:\var1_itogdannie.txt" 'Полное имя файла с итоговыми данными
'Создание файла var1_ishoddannie.txt
Open fname1 For Output As #1 'открытие файла var1_ishoddannie.txt
s = InputBox("Введите текст, содержащий буквы русского алфавита, цифры, знаки пунктуации и пробелы, объемом 300-400 символов") ' считывание строки
Print #1, s 'Запись введенного теста в файл C:\var1_ishoddannie.txt
Close #1 'Закрытие файлаC:\var1_ishoddannie.txt
Open fname1 For Input As #2 'Открытие файла для обработки
Open fname2 For Output As #3 'открытие файла var1_itogdannie.txt
s1 = "" ' вспомогатальная переменная, изначально пустая
s = "" 'строка, в которую соберем текст из файла
'пока не конец файла собираем строки файла в переменную S
Do Until EOF(2)
Line Input #2, s1
s = s + " " + s1
Loop
s1 = s 'вспомогательной переменной присвоили значение строки s
s = "" 'строка s - пустая
' в цикле от 1 до количества символов строки s1 исключаем знаки пунктуации
' и цифры из строки s1, собираем S по буквам
For i = 1 To Len(s1)
If Mid(s1, i, 1) Like "[-.!?,:;0123456789]" = False Then s = s + Mid(s1, i, 1)
Next
s = Trim(s) 'удалили пробелы в начале и конце строки, если они были
t = 0 ' счетчик слов, удовлетворяющих условию задачи
i = 1
n = Len(s)
While i <= n
p = ""
pglas = ""
psoglas = ""
n2 = 0
n3 = 0
' пока не дошли до пробела и i <= n собираем слово p и подсчитываем в нем количество букв
'а так же собираем отдельно все гласные этого слова
While Mid(s, i, 1) <> " " And i <= n
p = p + Mid(s, i, 1)
If Mid(s, i, 1) Like "[аяуюеёэиыо]" = True Then
pglas = pglas + Mid(s, i, 1)
n2 = n2 + 1
End If
If Mid(s, i, 1) Like "[йцкнгшщзхфвпрлджчсмтб]" = True Then
psoglas = psoglas + Mid(s, i, 1)
n3 = n3 + 1
End If
i = i + 1
Wend
'если колво гласных n2 больше или равно количеству согласных букв в слове записываем слово p в файл с результатом работы программы
If n2 Mod 2 And Not n3 Mod 2 Then
t = t + 1
Print #3, p
End If
'прокручиваем пробелы
While Mid(s, i, 1) = " " And i < n
i = i + 1
Wend
Wend
Print #3, "Слов где нечетное число гласных и четное число согласных " & t ' записываем количество слов в файл результата
Close #2 'закрываем файл var1_ishoddannie.txt
Close #3 'закрываем файл var1_itogdannie.txt
Documents.Open FileName:=fname1 'открываем файл через ворд для просмотра
Documents.Open FileName:=fname2 'открываем файл через ворд для просмотра
End Sub
Тест:
И
сходные
данные: Результат об
работки
