Материалы этой статьи опубликованы в [12], [].
§ 1.
…
1.1.
Удобно хранить исходные данные для больших программ в виде отдельных файлов. Тогда при запуске программ не надо будет каждый раз эти данные вводить, а полученные результаты тоже хранить в файловом виде.
Рассмотрим основные принципы работы с файлами.
В табл. 9.5 приведены наиболее часто используемые функции, обеспечивающие операции с файлами.
Таблица 9.5. Функции работы с файлами
Функция | Описание |
Open PathName For Mode [Access Am] [Lock] As #FileNumber [Len = reclen] Seek #FileNumber Position Seek (#FileNumber) FreeFile[(Range) ] Get #FileNumber, [RecNumber], VarName Put #FileNumber, [RecNumber], VarName LineInput #FileNumber VarName Input #FileNumber, VarList Input(Number, #FileNumber) Print #FileNumber, [OutputList] Write #FileNumber, [OutputList] FileLen(PathName) LOF(FileNumber) EOF(FileNumber) Dir [ (Path [.Attributes]) ] CurDir ChDir Path MkDir Path RmDir path Kill PathName | Функция Open открывает файл для выполнения операций чтения/записи. Параметр PathName задает имя файла, к которому надо получить доступ. Параметр Mode задает режим доступа к файлу: Input — ввод данных (чтение), Output — вывод данных (запись), Binary — чтение/запись файла прямого доступа, Random — чтение/запись текстового двоичного файла. Параметр Am задает операции, разрешенные для открытого файла: Read (чтение), Write (запись), Read Write (чтение/запись). Параметр FileNumber — номер файла (число в диапазоне от 1 до 511) используется в файловых операциях в качестве идентификатора файла. Параметр reclen задает длину записи файла (размер буфера), если файл открывается в режиме прямого доступа (Binary) Функция Seek устанавливает указатель текущей позиции для выполнения операции чтения/записи файла, открытого в режиме прямого доступа (Binary). Параметр FileNumber — идентификатор файла. Параметр Position задает позицию (номер байта или записи), которую надо прочитать или перезаписать Функция Seek возвращает текущую позицию указателя чтения/записи для файла Функция FreeFile возвращает число, которое можно использовать в качестве идентификатора файла (параметра FileNumber в функции Open) Функция Get считывает данные из файла: FileNumber — номер (идентификатор) файла, RecNumber — позиция (номер байта или номер записи, если файл открыт в режиме Binary), в которую надо, установить указатель чтения перед выполнением операции, VarName — переменная, в которую надо поместить данные Функция Put записывает данные в файл: FileNumber — номер (идентификатор) файла, RecNumber — позиция (номер байта или номер записи, если файл открыт в режиме Binary), в которую надо, установить указатель чтения перед выполнением операции, VarName — переменная, в которой находятся данные Функция Line с параметром Input считывает строку из файла FileNumber и записывает ее в переменную VarName. Чтение происходит до тех пор, пока не будет обнаружен символ "новая строка" (код 13) Функция Input считывает данные из файла. FileNumber — номер файла, VarList — список переменных, значение которых надо прочитать из файла. Например: Input #1, a,b,c Функция Input считывает символьные или байтовые данные из файла, открытого в режиме Input или Binary. Number — число считываемых символов или байтов, FileNumber — номер файла. Например: IDChar=Input(1,#1) Функция записывает в заданный параметром FileNumber текст. Параметр OutputList (список вывода) — список выражений символьного типа. Например: Print #1, "a="+Str(a),"b="+Str(b) Функция записывает данные в файл. OutputList —записываемые данные (список переменных). Символьные данные в файле будут заключены в кавычки. Например: Write #1, а, b Функция FileLen возвращает длину файла (в байтах) Функция LOF возвращает длину файла (в байтах) Функция EOF проверяет положение указателя чтения/записи. Значение функции равно True, если достигнут конец файла (прочитан последний элемент данных) Функция Dir возвращает имя файла или папки, соответствующее критерию, заданному параметрами Path и Attributes. Если файлов (каталогов), удовлетворяющих указанным параметрам нет, то значение функции – “пустая” строка (“ ”).Если в качестве параметра Path задан шаблон имени файла (например, c:\temp\*.bmp), то значение функции - имя файла, соответствующее шаблону. Чтобы получить имена остальных файлов, соответствующих шаблону, надо вызвать функцию Dir ещё раз, но без параметров. Например: fn=Dir(“C:\temp\*.bmp”) fn=fn+Chr (13)+ Dir Файл Attributes задаёт (уточняет) тип файла: Normal (0), ReadOnly (1), Hidden(2), System(4), Directory (16) -каталог. Примеры: Dir (“e:\test.txt”) -возвращает “test.txt”, если файл test. txt существует на диске е; Dir (“e:\t\*. txt”)- возвращает имя первого найденного в каталоге e:\t файла с расширением txt; Dir (“e:\”, vbDirectory) –возвращает имя первого (по порядку) подкаталога корневого каталога диска е: Функция CurDir (без параметров) возвращает полное имя текущей (рабочей) папки. Сразу после запуска программы текущая папка - это папка, из которой запущена программа. Функция ChDir задаёт текущий (рабочий) каталог Функция MkDir создаёт новый каталог. Параметр Path задаёт путь к новому каталогу и его имя. При попытке создать каталог в несуществующей папке возникнет ошибка Функция RmDir удаляет каталог. Параметр Path задаёт полное имя каталога, который надо удалить. При попытке удалить каталог, в котором есть файлы, возникнет ошибка. В этом случае нужно сначала из него удалить файлы (функция Kill), и только после этого можно удалить сам каталог Функция Kill удаляет файл. Параметр PathName (полное имя файла) задаёт файл, который надо удалить. Если в качестве имени задать шаблон, то будут удалены все файлы, имена которых соответствуют указанному шаблону. Например: Kill “c:\temp\*.tmp” |
В Visual Basic реализованы три типа доступа к файлам:
|
|
|
|
· последовательный – для чтения и записи текстовых файлов;
· произвольный – для чтения и записи текста с записями структурированной длины;
· двоичный – для чтения и записи произвольно структурированных файлов.
- Имеются 3 разных типа файлов:
- - последовательные файлы
- - файлы с произвольным доступом
- - бинарные файлы
Файлы бывают двух типов:
· Последовательного доступа
· Произвольного доступа
Мы в будем рассматривать только последовательный доступ. Данные в файле хранятся при этом в неструктурированном виде.
Доступ к файлам VBA подразумевает выполнение 3 действий:
- открытие файла
- чтение или запись файла
- закрытие файла
Работа с файлами данных всегда состоит из нескольких этапов:
· получение дескриптора файла;
|
|
· открытие файла;
· чтение или запись данных;
· закрытие файла.>
Рассмотрим все перечисленные этапы поочередно.
Дескриптор файла. Чтобы работать с файлами, нужно понимать, как связывается система с файлом. Для этого имеется канал ввода-вывода. При открытии файлу ставится в соответствие канал с определенным номером. Каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Для ввода и вывода данных имеет значение не имя файла, а номер канала.
Функция Visual Basic FreeFile возвращает номер свободного канала, который можно использовать для работы с файлом.
intFh = FreeFile()
В этом примере переменной intFH присваивается целое значение, которое можно использовать для открытия файла.
Команда открытия файла:
Open «имя путь.txt» for режим работы, номер цикла
Открытие файлов:
Прежде чем начать запись или чтение файла его необходимо открыть. Файл открывается при помощи оператора Open, в котором используется следующий синтаксис:
Open Filename for mode Access lock
As # filenum LEN = reclen
Filename – строка определяет название файла, который необходимо открыть.
Mode – необязательный аргумент, который определяет режим доступа к файлу возможного значения:
APPEND – последовательный доступ к файлу. Если файл уже существует, то данные присоединяются в конец файла, если файл не существует, то они отсоединяются.
BINARU – бинарный доступ к файлу для чтения и записи.
INPUT – последовательный доступ к файлу только для чтения, если файл не существует, то возникает ошибка.
OUTPUT – последовательный доступ только для записи. Если файл существует, он удаляется и создается заново, если не существует, то просто создается.
RANDOM – произвольный доступ для чтения и записи данных. Этот режим используется по умолчанию, если аргумент mod не задан.
ACCESS – необязательный аргумент, определяющий операции которые размещены с открытым файлом.
READ – файл открыт только для чтения.
WRITE - файл открыт только для записи.
READWRITE - файл открыт только для чтения и записи.
Открытие файла. Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора Open.
|
|
Open Имя_файла For [Input \ Output \ Append] As FileHandle
Если в операторе использовано слово Input, то файл открывается только для чтения из файла. Если файл не существует и открывается для чтения, то Visual Basic выдает сообщение об ошибке.
Если в операторе использовано слово Output, то файл открывается для записи. Если файл с таким именем уже существует, то его содержимое удаляется. Если файла с таким именем нет на диске, то создается новый файл.
Если в операторе использовано слово Append, то файл открывается для добавления. Если файла с таким именем нет, то он создается.
В конце оператора указывается номер канала, возвращаемый функцией FreeFile. Приведем несколько примеров использования оператора Open при последовательном доступе.