- •Практическая работа работа с файлами в vba. Файлы последовательного доступа
- •Input #1, j ‘читаем элемент файла
- •Практическая работа работа с файлами в vba. Файлы произвольного и бинарного доступа
- •If eof(1) Then 'если конец файла - выходим из цикла чтения элементов
- •If eof(1) Then 'если конец файла - выходим из цикла чтения элементов
Input #1, j ‘читаем элемент файла
Cells(i, 1) = j
i = i + 1
Loop
Close #1 ' Закрываем файл
End Sub
Сравните результат работы подпрограммы с использованием команды Input и команды Line Input.
Пусть необходимо добавить строчку в файл. Как его открыть в этом случае? Если открыть как Output, тогда мы потеряем все содержимое файла, при открытии Input мы можем только читать, но не можем писать. Для этого случая существует Append - при открытии на запись указатель позиции устанавливается на конец файла - поэтому можно писать в конец. Допишем в конец нашего файла его имя:
Sub addFile()
Open "e:\exampl.txt" For Append As #1
'открываем файл на дозапись в конец и присваиваем ему номер 1
Print #1, "e:\exampl.txt" 'выводим в файл его имя
Close #1 'обязательно нужно закрыть файл!
End Sub
Откройте файл в блокноте и посмотрите результат.
Напишите процедуру, которая будет считывать из файла строчки, преобразовывать их согласно заданию, выданному преподавателем, и записывать их в новый файл.
Самостоятельно напишите программу обработки файла, решающую поставленную преподавателем задачу.
Практическая работа работа с файлами в vba. Файлы произвольного и бинарного доступа
Цели работы:
познакомиться с типами файлов;
освоить процедуры чтения, записи и обработки файлов произвольного доступа и двоичных;
научиться обрабатывать информацию, хранящуюся в файлах.
ЗАДАНИЯ
Файлы произвольного доступа еще называют типизированными файлами, так как в них информация храниться в виде однотипных элементов, занимающих одинаковый объем памяти. Именно тот факт, что все элементы имеют одинаковый объем, позволяет получить доступ непосредственно к любому элементу файла, так как его положение легко вычисляется как смещение от начала файла на Длина_компонента*(Номер_компонента-1). В отличие от файлов с последовательным доступом прочитать содержимое типизированного файла в текстовом редакторе нельзя2, но можно одновременно читать и писать, открыв такой файл. Начнем с формирования файла произвольного доступа. В качестве источника будем использовать созданную ранее таблицу базы данных3. Каждая запись о сотруднике кафедры содержит разнотипные и разноформатные данные. Определим для хранения записи особый пользовательский тип:
Type Employee
ID As Integer
Family As String * 20
Name As String * 20
LenService As Integer 'стаж
Category As Integer
BirthDay As Date
Combine As Boolean 'совместительство
Post As String * 30
Degree As String * 10
End Type
Перепишем теперь записи таблицы в файл произвольного доступа. При открытии файла указывается Random - произвольный доступ к элементам, и обязательно - длина элементов, образующих его. Запись в файл осуществляется функцией Put, в которой необходимо указать номер файла, позицию и переменную из которой производится запись в файл. Позиция может быть пропущена, тогда запись производится в текущую позицию4.
Sub NewFile()
Dim i As Integer
Dim MyRecord As Employee ' Объявляем переменную типа запись
Open "bd.dat" For Random As #1 Len = Len(MyRecord)
For i = 2 To Application.CountA(ActiveSheet.Columns(1)) ' для всех записей таблицы
With MyRecord 'считываеv из i-ой строки запись о сотруднике
.ID = Cells(i, 1)
.Family = Cells(i, 2)
.Name = Cells(i, 3)
.LenService = Cells(i, 4)
.Category = Cells(i, 5)
.BirthDay = Cells(i, 6)
.Combine = Cells(i, 7)
.Post = Cells(i, 8)
.Degree = Cells(i, 9)
End With
Put #1, i - 1, MyRecord ' Записываем запись в файл
Next i
Close #1 ' Закрываем файл
End Sub
Откройте созданный файл в блокноте и посмотрите результат. Сравните объем созданного файла и файла Execel, состоящего из одного листа с таблицей. Хранение данных в файлах произвольного доступа имеет свои преимущества - экономию памяти, но усложняет извлечение данных из них.
Следующий этап - это чтение из файла. Предположим, что у нас есть файл с данными и мы хотим его просмотреть на листе Excel. Для этого необходимо подготовить форму таблицы - ее заголовок, считать и отобразить записи из файла произвольного доступа. Чтение осуществляет функция Get, в которой указывается номер файла, позиция считывания5 и переменная, в которую заносятся считанные данные. Проиллюстрируем сказанное:
Sub FileInTable()
Dim i As Integer
Dim MyRecord As Employee ' Объявляем переменную типа запись
'Названия столбцов таблицы берем из массива
Range("A1:I1").Value = Array("n/n", "ФАМИЛИЯ", "ИМЯ", "СТАЖ", "РАЗРЯД",_ "ДАТА РОЖДЕНИЯ", "СОВМЕСТИТЕЛЬСТВО", "ДОЛЖНОСТЬ", "СТЕПЕНЬ")
Заголовок 'Запускаем макрос форматирования «шапки» таблицы и закрепления области
Примечания 'добавляем примечания к заголовкам
'открываем файл произвольного доступа при этом обязательно указывается длина одной записи
Open "bd.dat" For Random As #1 Len = Len(MyRecord)
i = 1
Do
Get #1, i, MyRecord ' Читаем одну запись