Хранение данных в файлах

Типы файлов в 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; просмотров: 824;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.023 сек.