Хранение данных в файлах
Типы файлов в VBA.
1. Файл последовательного доступа рассматривается как последовательность строк произвольной длины, разделенных специальными символами. Чтение и запись в файл производится построчно.
2. Файл произвольного доступа состоит из записей фиксированной длины и размер записи указывается при его открытии. Это позволяет локализовать любую запись в файле по ее номеру.
3. Бинарный файл является частным случаем файла произвольного доступа. Размер записи в бинарном файле считается равным 1 байту.
Файлы последовательного доступа (или последовательные файлы) используются для хранения информации в текстовом формате (цепочки кодов ASCII).
Операторы VBA для работы с файлами последовательного доступа позволяют:
а) открыть файл для доступа к его содержимому - либо для записи в него новых данных, либо для чтения записанной в нем информации;
б) внести в открытый файл очередную порцию информации (записать в файл данные из программы).
в) извлечь данные из открытого файла (прочитать очередную порцию информации) и поместить их в программу;
г) закрыть файл после того, как работа над ним завершилась.
Открытие файла:
Open ИмяФайла For РежимРаботы As# ДескрипторФайла
Имя файла - строка символов, заключенная в кавычки, либо выражение, значением которого является строка символов. Строка представляет собой полное имя файла (т.е. спецификацию файла):
"С :\Мои_файлы\file123.txt"
Если указано только имя файла, то он должен находиться в текущем каталоге.
Режим работы:
Output - если файл открывается для записи данных, начиная с первой позиции, то при записи все предыдущая информация будет в нем стерта.
Append - если файл открывается для записи в него данных не с первой, а с конечной позиции.
Input - если файл открывается для чтения из него.
ДескрипторФайла - любое целое число от 1 до 511. Оно служит идентификатором файла.
Закрытие файлов:
Close # [СписокДескрипторов] (через запятую)
Если просто Close, то закрываются все открытые файлы.
Запись в файл:
Write, Print - оба записывают данные в файл текстовыми строками.
Текстовая строка (строка текста) - не путать с понятием строки как типа данных String: это последовательность символов, которая заканчивается знаком перехода на новую текстовую строку или знаком возврата каретки (ПС и ВК) - коды 13 и 10 ASCII.
Текстовый файл представляет собой последовательность текстовых
строк.
Синтаксис:
Write # ДескрипторФайла, [СписокЗначений]
Print # ДескрипторФайла, [СписокЗначений]
СписокЗначений - это записанные через запятую значения (или выражения, значения которых вычисляются, в частности переменные). Если СписокЗначений отсутствует, то в файл записывается пустая строка.
Логика работы Write и Print различна:
Write - последовательно просматривается СписокЗначений и каждый элемент этого списка записывается в одну текстовую строку через запятую. Элементы типа String заключаются в кавычки. После записи последнего элемента записывается символ перехода на новую строку.
Print - элементы СпискаЗначений разделены либо запятой, либо точкой с запятой. Точка с запятой (;) - значения записываются подряд, без разделителей. Запятая (,) - значения записываются в 14-символьные зоны
вывода. Кроме того, в СпискеЗначений оператора Print могут присутствовать функции:
Spc(n) - для вставки п пробелов между значениями.
Tab(n) - для указания номера п позиции для записи следующего значения.
Оператор Print удобен для тщательного редактирования текста выходного файла, а оператор Write лучше использовать в том случае, когда выходной файл будет применяться в дальнейшем как входной для других программ.
Пример. Программа генерации и записи в текстовый файл таких
строк-
«Строка1», 1, 1
«Строка2», 4, 8
«СтрокаЗ», 9, 27 (квадраты и кубы номеров строк)
Будем считать, что выходной файл в дальнейшем будет использоваться в работе других программ, и используем Write. Для создания элемента Строка$ в СпискеЗначений оператора Write используем конкатенацию &.
Open "filel .txt" For Output As #1
Write #1,
For i%=l to 10
Строка$= «Строка»&1
Write #l,Cтрока$,i^2,i^3
Next i Close #1/
Пример. Создадим текстовый файл, аналогичный предыдущему, с помощью Print.
Open "file2.txt" For Output As # 1
Print #1
For i%=l to 10
Print #1, Tab(5); "Строка"&i;Spc(15);iA2;iA3
Next i Close #1.
При чтении они будут выглядеть так:
«Строка1»,1,1 Строка1 1 1
«Строка2»,4,8 Строка2 4 8
.
.
.
«Строка9»,81,729 Строка9 81 729
«Строка10»,100,1000 Строка 10 100 1000
Write Записаны с помощью Print
Чтение из файла:
а) с помощью операторов Input и Line Input
б) с помощью функции Input.
Input # ДескрипторФайла,СписокПеременных
СписокПеременных - записанные через запятую переменные любого типа, например:
Фамилия$,Имя$,Возраст%.
Пусть в файле содержатся строки:
«Иванов», «Петя», 13
«Петров», «Вася», 15.
«Сидорова», «Настя»,86
Чаще всего чтение из файла производят циклически: Do While....Loop или Do Until.....Loop. Условие окончания - попытка
прочитать данные после чтения последней текстовой строки. Это приводит к тому, что значение EOF равно True.
Пример: поместим все фамилии в ListBox:
Private Sub CommandButton l_Click( )
Open "file3.txt" For Input AS #1
Do Until EOF(l)
Input # 1 ,fam$,Im$,Age%
ListBox1.List(i%)=fam
i=1+l
Loop Close# 1
End Sub
Line Input #ДескрипторФайла,Переменная
Переменная - переменная типа String или Variant.
В результате работы Line Input Переменной присваивается значение всей очередной текстовой строки.
Пример: чтение двух файлов.
Open "file1-2.txt" For Input As #1
Do Until EOF(l)
Line Input # 1, TextLine$
Print TextLine
Loop Close # 1
Input (ЧислоСимволов, #Дескриптор)
Пример:
ЧислоСимволов=LOF( 1)
Textl.Техt=Input(ЧислоСимволов,# 1)
Пояснение: в текстовое поле записывается содержимое всего текстового файла с идентификатором (дескриптором) #1.
Пример. Процедура ПримерИспользованияInput последовательно считывает фамилии и оценки и возвращает их на лист Excel.
Туре Студенты
Фамилия As String *20
Оценка As String *3
End Type
Sub ПримерИспользованияInput( )
Dim Студент As Студенты
Open "ГруппаСтудентов" For Input As #2
I=1
Do While Not EOF(2)
With Студент
Input #2, .Фамилия,.Оценка
Cells (i,1).Value=.Фамилия
Cells (i,2).Value=.Оценка
End With
I=i+1
Loop
Close #1
End Sub
2.МОДЕЛИРОВАНИЕ НЕКОТОРЫХ ФИЗИЧЕСКИХ СИСТЕМ[1,2]
Моделирование остановки колеса трением[2]
Колесо массой m=1 кг, распределенной по ободу радиусом R=0,35 м, вращается со скоростью ω=10рад/с на оси с жидкой смазкой и тормозится только трением в оси. Считая, что Мтр = - аω - bω3, где а = 2,8*10-2 Н*м*с и b = 9,1*10-1 Н*м*с3, колесо остановится, когда угловая скорость становится равной 0,1 рад/с (захват трением покоя). Найти время и число оборотов до остановки.
Уравнение движения: .
Алгоритм:
t = 16,7 с.
Программная реализация модели:
Public Sub z3()
pi=3.141596
m= 1
r = 0.35
wo= 10.5
wt = 0.1
a = 0.028
b = 0.0091
A = 0.01
fi = 0
While wo > wt
z = (a * wo + b * wo л 3) / (m * r * r)
wo = wo - z * dt
T = T + dt
fi = fi + wo * dt
'i = MsgBox(wo, 0, "dd")
Wend
Worksheets(4).Cells(18, 6).Formula = T
Worksheets(4).Cells(19, 6).Formula = fi / (2 * pi)
End Sub
Время | 12,44 |
Число оборотов |
Дата добавления: 2016-02-04; просмотров: 837;