avangard-pressa.ru

Обмен данными между двумя файлами - Математика

Пример 8.3 –

Имеется некоторый текстовый файл, где в каждой строке находится или некоторое число, или некоторый текст. Требуется вывести все числа из этого файла, превышающие 10, в другой файл. Имя файла с исходными данными должно выбираться пользователем. Имя файла для вывода результатов – D:\User\chisla.txt. Если этот файл уже существует, то его прежнее содержимое должно удаляться.

Sub primer8_3()

Set fso = CreateObject("scripting.filesystemobject")

ChDrive "D"

ChDir "D:\User"

otkr_file = Application.GetOpenFilename("Text Files (*.txt), *.txt")

rez_file = "D:\User\chisla.txt"

Set ishod = fso.OpenTextFile(otkr_file, ForReading)

Set rezult = fso.OpenTextFile(rez_file, ForWriting, True)

Do While Not ishod.AtEndOfStream

stroka = ishod.ReadLine

If IsNumeric(stroka) Then

x = CSng(stroka)

If x > 10 Then rezult.WriteLine (x)

End If

Loop

ishod.Close

rezult.Close

End Sub

В операторе

Set rezult = fso.OpenTextFile(rez_file, ForWriting, True)

файл с заданным именем (хранящимся в переменной

rez_file

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

ForWriting

). Значение

True

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

ForWriting

было бы указано

ForAppending

. С открываемым файлом связывается объект

rezult

.

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

ishod

и

result

).

Функции обработки строк

В таблице 8.1 приведены некоторые встроенные функции языка VBA для обработки строк.

Таблица 8.1 – Основные функции обработки строк в VBA

Функция и ее аргументы Возвращаемое значение Len (строка) Длина строки. Left(строка, длина) Подстрока заданной длины, выделенная из исходной строки слева. Right(строка, длина) Подстрока заданной длины, выделенная из исходной строки справа. Mid(строка, начало, длина) Подстрока заданной длины, выделенная из исходной строки, начиная с символа с номером «начало». Trim (строка) Заданная строка без начальных и концевых пробелов. LTrim (строка) Заданная строка без начальных пробелов. RTrim (строка) Заданная строка без концевых пробелов. LCase (строка) Заданная строка, преобразованная в строчные буквы. UCase (строка) Заданная строка, преобразованная в заглавные буквы. InStr (начало, исходная строка, искомая подстрока) Позиция искомой подстроки в исходной строке, начиная с позиции с номером «начало». Если «начало» не указано, то поиск выполняется с первой позиции. Если искомая подстрока отсутствует, возвращается значение 0. Replace (исходная строка, заменяемая подстрока, заменяющая подстрока, начало, количество замен) В исходной строке одна подстрока заменяется на другую. Замена выполняется, начиная с позиции с номером «начало». Если «начало» не указано, то замена выполняется с первой позиции. Если не указано «количество замен», то заменяются все вхождения заменяемой подстроки. StrComp (строка1, строка2) Выполняется сравнение заданных строк. Возвращается значение 1, если «строка1» больше «строки2», значение 0, если строки равны, и значение -1, если «строка1» меньше «строки2».

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

Пример 8.4 –

Имеется текстовый файл, где указаны фамилии людей и их доходы в следующей форме:

Иванов 200

Петров 500

Сидоров 120

Требуется вывести эти данные на рабочий лист Excel: фамилии – в столбец A, доходы – в столбец B. Имя файла должно запрашиваться у пользователя в стандартном окне открытия файла.

Sub primer8_4()

Set fso = CreateObject(“Scripting.FileSystemObject”)

ChDrive (“D”)

ChDir(“D:\User”)

otkr_file = Application.GetOpenFilename()

If otkr_file = False Then Exit Sub

Set vvod = fso.OpenTextFile(otkr_file, ForReading)

i=0

Do While Not vvod.AtEndOfStream

stroka = vvod.ReadLine

stroka = Trim(stroka)

k=InStr(stroka,” “)

If k = 0 Then

MsgBox(“Ошибка в файле данных”)

Exit Sub

End If

familia = Left(stroka, k - 1)

dlina = Len(stroka)

dohod_stroka = Right(stroka, dlina - k)

dohod_stroka = Trim(dohod_stroka)

If IsNumeric(dohod_stroka) = False Then

MsgBox(“Ошибка в файле данных”)

Exit Sub

End If

dohod=CSng(dohod_stroka)

i=i+1

Cells(i,1).value = familia

Cells(i,2).value = dohod

Loop

Vvod.Close

End Sub

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

Do While

), рассмотрены ранее.

В операторе

stroka = vvod.ReadLine

вводится одна строка из заданного файла. Эта строка присваивается переменной

strokа

. В операторе

stroka = Trim(stroka)

функция

Trim

удаляет из переменной

strokа

начальные и концевые пробелы, т.е. пробелы в начале и в конце строки (если они есть).

В операторе

k=InStr(stroka,” “)

определяется позиция первого пробела в переменной

stroka

. Например, если переменная

stroka

имеет значение “Иванов 200”, то переменная

k

получит значение 7. Если пробел в переменной

stroka

отсутствует (

k

=0), значит, данные в файле заданы неправильно, и программа завершается с выдачей сообщения об ошибке в файле данных.

В операторе

familia = Left(stroka, k - 1)

из переменной

stroka

выделяются ее левые символы до первого пробела, т.е. фамилия.

Оператор

dlina = Len(stroka)

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

dohod_stroka = Right(stroka, dlina - k)

выделяется правая часть строки. Например, для строки “Иванов 200” переменные получат значение

k

=7,

dlina

=10 (если между фамилией и доходом указан один пробел). Таким образом, функция

Right(stroka, dlina - k)

выделит из переменной

stroka

три правых символа, т.е. подстроку “200”.

Оператор

dohod_stroka = Trim(dohod_stroka)

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

Trim

удалит их.

Затем с помощью функции

IsNumeric

проверяется, действительно ли выделенная часть строки (переменная

dohod_stroka

) представляет собой число. Если это не так (функция

IsNumeric

возвращает значение

False

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

Exit Sub

).

После проверки переменная

dohod_stroka

преобразуется в число (переменная

dohod

) с помощью функции

CSng

. В операторе

i = i+1

вычисляется номер очередной строки на рабочем листе Excel, в которую требуется вывести фамилию и доход. Затем эти величины выводятся в заданные ячейки.

Примечание – Функции для работы со строками, как и другие функции, могут быть «вложены» друг в друга. Например, вместо операторов

dohod_stroka=Right(stroka, dlina-k)

и

dohod_stroka = Trim(dohod_stroka)

можно было использовать один оператор:

dohod_stroka = Trim(Right(stroka, dlina - k))

.

Пример 8.5

– В столбце A рабочего листа

Лист1

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

Лист2

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

Sub primer8_5()

Dim spisok() As String ‘Объявление массива для списка работников

Set d = Range(“A1”).CurrentRegion ‘Определение диапазона с данными

m = d.Rows.Count ‘Определение количества строк (работников)

ReDim spisok(1 To m) ‘Объявление массива необходимого размера

For i = 1 To m ‘Перебор всех работников

fam_im_ot = Trim(Cells(i,1)) ‘Содержимое ячейки присваивается переменной

‘fam_im_ot. Если есть начальные или конечные

‘пробелы, то они удаляются

probel1 = InStr(fam_im_ot,” “) ‘Определяется позиция первого пробела (между

‘фамилией и именем)

fam_i = Left(fam_im_ot, probel1 + 1) ‘Выделяется фамилия и первая буква имени

probel2 = InStr(probel1+1, fam_im_ot, ” “) ‘Определяется позиция второго пробела (между

‘именем и отчеством). Поиск начинается с пози-

‘ции, следующей за первым пробелом

init_ot = mid(fam_im_ot, probel2+1, 1) ‘Выделяется первая буква отчества

fam_io = fam_i+”.“+init_ot+”.” ‘Фамилия и инициалы соединяются

spisok(i) = fam_io ‘Присваивание элементу массива

Next i ‘Переход к следующему работнику

‘ Сортировка списка работников (массива spisok)

For i = 1 To m-1 ‘ФИО каждого работника будет сравниваться

For j =i+1 To m ‘со всеми последующими

If StrComp(spisok(i), spisok(j)) = 1 Then ‘Если ФИО i-го работника «больше», чем j-го,

x = spisok(i) ‘то они меняются местами

spisok(i) = spisok(j)

spisok(j) = x

End If

Next j

Next i

‘ Вывод отсортированного массива на рабочий лист Лист2

Worksheets("Лист2").Activate ‘Рабочий лист становится текущим

For i = 1 To m

Cells(i,1).Value = spisok(i) ‘Вывод в ячейки рабочего листа, в столбец A

Next i

End Sub

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

StrComp

, используемой для «сравнения» строк при их сортировке по алфавиту. При сравнении строк «большей» считается строка, расположенная «ниже» по алфавиту. Например, если в приведенной программе некоторый (

i

-й) элемент массива

spisok

будет содержать значение “Иванов Ю.С.”, а

j

-й элемент этого массива – значение “Яшин А.П.”, то функция

StrComp(spisok(i), spisok(j))

вернет значение -1, так как строка “Иванов Ю.С.” считается «меньшей», чем строка “Яшин А.П.”. В этом случае элементы массива не будут меняться местами. Если же, например,

i

-й элемент массива

spisok

содержит значение “Антонов С.К.”, а

j

-й – значение “Андреев Ф.Р.”, то функция

StrComp(spisok(i), spisok(j))

вернет значение 1, и элементы массива поменяются местами.

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

Варианты заданий

Примечание – В этой лабораторной работе варианты 1-6 представляют собой задачи на операции с файлами, варианты 7-12 – задачи на обработку строк.

Вариант 1

– На рабочем листе

Лист1

в столбце A указаны фамилии людей, в столбце B – их адреса (адрес включает почтовый индекс, город, улицу, дом и квартиру). Имеется также текстовый файл со списком городов (в каждой строке – один город). Программа должна выводить в новый текстовый файл и на рабочий лист

Лист2

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

Вариант 2

– На рабочем листе в столбце A расположены фамилии работников некоторой организации, в столбце B – их доходы. Имеется также текстовый файл, где указаны дополнительные доходы некоторых из этих работников: в каждой строке файла – фамилия и дополнительный доход, разделенные пробелами (одним или несколькими). Порядок фамилий в файле и на рабочем листе может не совпадать. Программа должна прибавлять дополнительные доходы, указанные в текстовом файле, к доходам, содержащимся в столбце B. Кроме того, перечень работников и их доходов, упорядоченный по алфавиту, должен выводиться в новый текстовый файл.

Вариант 3

– На рабочем листе Excel в столбце A расположены номера контрактов, в столбце B – названия товаров, в столбце C – цены на товары, в столбце D – количества товаров. Цена каждого товара во всех контрактах одинакова. Имеется также текстовый файл, где указаны названия некоторых из товаров и коэффициенты повышения цен на них: в каждой строке файла – название товара и коэффициент повышения цены, разделенные пробелами. Программа должна вычислять новые цены и выводить их в столбец C взамен старых. Кроме того, данные обо всех контрактах, для которых была изменена цена товара, должны выводиться в новый текстовый файл. Эти данные должны быть упорядочены по названиям товаров.

Вариант 4

– На рабочем листе в столбце A введены фамилии работников, в столбце B – номера отделов, где они работают (в одном отделе может быть несколько работников), в столбце C – их зарплаты. Имеется также текстовый файл, где указаны номера отделов и коэффициенты повышения зарплаты: в каждой строке файла – номер отдела и коэффициент повышения зарплаты для его работников, разделенные пробелами. Программа должна вычислять новые зарплаты и выводить их в столбец C взамен старых. Кроме того, программа должна вычислять для каждого отдела количество работников и сумму их зарплат (считать, что в файле с коэффициентами повышения зарплат перечислены все отделы). Эти данные должны выводиться в новый текстовый файл: каждая строка в этом файле должна содержать данные по одному отделу. Данные в новом файле должны быть упорядочены по номеру отдела.

Вариант 5

– На рабочем листе

Лист1

в столбце A перечислены названия валют, в столбце B – их курсы в долларах. Имеется также текстовый файл, где приведены названия товаров, цены этих товаров и названия валют, в которых указаны цены. В каждой строке файла имеются данные по одному товару, разделенные пробелами. Программа должна выводить в новый текстовый файл названия товаров и их цены в долларах. Перечень должен быть упорядочен по названиям товаров. Кроме того, данные о товарах (название товара, исходная цена, валюта, цена в долларах) должны выводиться на рабочий лист

Лист2

.

Вариант 6

– На рабочем листе в столбце A расположены фамилии студентов, в столбцах B-D – результаты сдачи ими трех экзаменов. Имеется также текстовый файл, где указаны фамилии этих же студентов и результаты сдачи ими четвертого экзамена (в каждой строке файла – фамилия и оценка, разделенные пробелами). Порядок фамилий в файле и на рабочем листе может не совпадать. Программа должна выводить оценки по четвертому экзамену в столбец E. Программа должна также создавать два текстовых файла: в один из них должны выводиться фамилии студентов со средним баллом выше 8 (с указанием среднего балла), во второй – фамилии остальных студентов. Оба файла должны быть упорядочены по фамилиям.

Вариант 7

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

Вариант 8

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

Вариант 9

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

Вариант 10

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

Вариант 11

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

Вариант 12

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

ЛИТЕРАТУРА

1

Шерстев, В. Л. Компьютерные информационные технологии / В.Л. Шерстнев. – Витебск: ВГТУ, 2006. – 350 с.

2

Кеттелл, Дж. Microsoft Office 2003. Полное руководство / Дж. Кет-телл, Г. Харт-Дэвис, К. Симмонс. – М.: ЭКОМ, 2006. – 832 с.

3

Меженный, О. А. Microsoft Office 2003. Краткое руководство. – М.: Издательский дом «Вильямс», 2005. – 368 с.

4

Гарнаев, А. Ю. Excel, VBA, Internet в экономике и финансах. – СПб.: БХВ–Петербург, 2002. – 816 с.

5

Слепцова, Л. Д. Программирование на VBA: Самоучитель. – М.: Издательский дом «Вильямс», 2004. – 384 с.

6

Программирование в пакетах Microsoft Office / С. В. Назаров [и др.]. М.: Финансы и статистика, 2007. – 656 с.

7

Ананьев, А. И. Самоучитель Visual Basic 6.0 / А.И. Ананьев, А.Ф. Федоров. – СПб.: БХВ–Петербург, 2005. – 624 с.

СОДЕРЖАНИЕ

Лабораторная работа №1

Развитые возможности табличного
процессора MS Excel: базы данных................................................................. 3

Лабораторная работа №2

Система управления базами данных
MS Access: таблицы, формы........................................................................... 19

Лабораторная работа №3

Система управления базами данных
MS Access: запросы, отчеты........................................................................... 31

Лабораторная работа №4

Основы программирования на языке VBA...... 48

Лабораторная работа №5

Операции с ячейками и рабочими листами
MS Excel в программах на VBA..................................................................... 75

Лабораторная работа №6

Элементы управления в программах на VBA. 88

Лабораторная работа №7

Пользовательские формы в программах на VBA 96

Лабораторная работа №8

Программы на VBA для работы
с текстовыми данными................................................................................... 114

Литература..................................................................................................... 125

  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат
  • Реферат