Файл: Учебник Макаровой.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.07.2024

Просмотров: 1142

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Открытие файла

Открывать можно как существующие на диске, так и новые файлы. Каждый файл идентифицируется в программе определенным номером, который присваивается ему в момент открытия. Свободный номер файла можно определить с помощью встроенной функции FileFree, которая возвращает очередной свободный номер для открытия файла (номер изменяется в диапазоне 1-511).

Файл открывают в определенном режиме работы:

Open <путь_имя_файла> [For <режимы>] [Access <направление_потока>] [<блокировка>] As [#]номер [Lеn=<длина_записи>]

где <путь_имя_файла>

- строка символов, задающая местоположение и имя дискового файла;

<режимы>

- режимы работы с файлом:

Append

 

добавление записей

Binary

 

двоичный файл

Input

 

файл для чтения

Output

 

файл для записи

Random

 

файл произвольного доступа;

<направление_потока> -

задает тип потока данных по отношению к файлу:

Read

 

только чтение

Write

 

только запись

Read Write

 

чтение и запись одновременно;

<блокировка>

- определяет возможность работы с файлом других приложений:

Shared

 

распределенный доступ

Lock Read

 

блокировка файла для чтения

Lock Write

 

блокировка файла для записи

Lock Read Write

 

блокировка файла для чтения и записи;

номер

-

условный идентификатор файла;

<длина_записи>

- указывается для записей фиксированной длины, максимум – 32767

 

 

байт. Оптимальная длина записи кратна размеру дискового сектора (512

 

 

байт).

Для файлов произвольного доступа объявляется структура записи с помощью оператора Туре; указываются типы и длина компонентов структуры. В режимах Binary, Input, Random под разными номерами можно открыть один и тот же файл, не закрывая ранее открытых; в режимах Append, Output требуется предварительно закрыть ранее открытые файлы.

Пример 19.27. Открытие файлов

Текст программы

Комментарий

Open "FILE" For Input As #1

Открытие последовательного файла для чтения

Open "FILE" For Binary Access

Открытие двоичного файла только для записи

Write As #1

 

Type Record Define userdefined type

Объявление пользовательского типа данных

ID As Integer

 

Name As String * 20

 

End Type

 

Dim MyRecord As Record

 

Open "FILE" For Random As #1

Открытие файла произвольного доступа. Длина

Len = Len(MyRecord)

записи файла определяется встроенной

 

функцией Len

Open "FILE" For Output Shared As #1

Открытие последовательного файла с

 

распределенным доступом (любые приложения

 

могут читать и писать в файл)

Open "FILE" For Binary Access

Открытие двоичного файла для чтения, чтение

Read Lock Read As #1

файла другим приложениям запрещено

 

 

Закрытие файла

594


После завершения работы с файлом его закрывают с помощью оператора:

Close [<список_номеров_файлов>]

Если номер закрываемого файла не указан, закрываются все открытые файлы.

Пример 19.28. Закрытие файлов

Close #1; #2; #4

' закрытие файлов, ранее открытых под номерами 1,2,4

Close

' закрытие всех открытых файлов

Запись информации в файл

Существует несколько операторов вывода информации в файл. 1. Печать в последовательный файл

Данный оператор обеспечивает запись форматированного вывода в последовательный файл текстового типа по аналогии с функцией печати:

Print #номер_файла; [<выходной_список_переменных>]

Выходной список печати может содержать:

[{Spc(n) | Tab[(n)]}] [<выражение>] [charpos]

где Spc(n)

- длина пустой строки;

Tab(n)

- печать с указанной позиции;

<выражение>

- выражение числового или символьного типа;

charpos

- определяет позицию вставки для следующего символа. Символ ; обеспечивает

 

переход на другую строку (к другой записи файла).

Если последовательный файл должен затем считываться, не рекомендуется применять оператор Print.

Пример 19.29. Печать в последовательный файл

Текст программы

Комментарий

Open "FILE" For Output As #1

Открытие файла для печати

Print # 1 ; "Печать любого текста"

Вывод в файл текстовой строки

Print #1;

Вставка пустой строки

Print #1; "Код"; Tab ; "Наименование"

Вывод в две колонки

Print #1; "Код" ; " " ; "Наименование"

Разделение двух слов пробелом

Print #l;Spc(5); "Код"

Вставка 5 отступов перед печатью слова

Print #l;Tab(10); "Код"

Позиционирование в колонку 10

MyBool = False

Присвоение значений переменным различного

MyDate = #February 12, 1969#

типа

 

MyNull = Null

 

MyError = CVErr(32767)

 

Print #1; MyBool;

Печать значения переменной в файл

Print # 1; MyDate; " это дата "

 

Print # 1 ; MyNull; " это пустое значение"

 

Print #1 ; My Error; " код ошибки"

 

Close #1

Закрытие файла

595


2. Запись в последовательный файл В последовательный файл запись информации выполняется командой:

Write #номер_файла; [<выходной_список_переменных>]

Для данных числового типа используется символ точка для десятичной точки. В отличие от оператора Print при записи в файл автоматически вставляются специальные символы-разделители:

запятая между элементами; двойные кавычки вокруг символьных данных.

В запись файла вставляется символ возврата каретки (переход на новую строку запись файла).

Пример 19.30. Запись информации в последовательный файл

3. Вывод данных в файл произвольного доступа Вывод данных выполняется оператором:

Put [#номер_файла; [#записи],<переменная>

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

Get, Put, Seek.

Пример 19.31. Запись в файл произвольного доступа

Текст программы

Комментарий

596


Type Record

Объявление пользовательского типа

ID As Integer

данных для записи

 

Name As String * 20

 

End Type

 

Dim MyRecord As Record

Объявление переменной на основе

 

пользовательского типа данных

Open "TESTFILE" For Random As

Открытие файла произвольного

#1 Len = Len(MyRecord)

доступа с длиной, соответствующей

 

длине объявленного типа

For RecordNumber = 1 To 5

Организация цикла для записи в файл

MyRecord.ID = RecordNumber

Формирование содержимого записи

MyRecord.Name = "Запись номер

 

-" & RecordNumber

 

Put #1, RecordNumber, MyRecord

Непосредственная запись в файл

Next RecordNumber

Конец цикла

Close #1

Закрытие файла

Ввод информации из файла

1. Чтение данных из последовательного файла Чтение выполняется оператором:

Input #номер_файла; <список_переменных>

Двойные кавычки при считывании игнорируются, выполняется проверка соответствия типов данных переменных и файла.

Пример 19.32. Запись в файл произвольного доступа

Текст программы

Комментарий

Open "FILE" For Input As #1

Открытие файла

Do While Not EOF(l)

Цикл до конца файла

Input # 1 ; MyString; MyNumber

Чтение данных записи в переменные

Debug.Print MyString; MyNumber

Печать считанных данных

Loop

Конец цикла

Close #1

Закрытие файла

Другим оператором чтения из последовательного файла является

Line Input #номер_файла; <переменная>

Оператор обеспечивает посимвольное считывание данных строки по файлу до обнаружения символа "возврат каретки" (Chr(13)) и присвоение этих данных указанной переменной символьного типа.

Пример 19.33. Построчное чтение из файла последовательного доступа

Текст программы

Комментарий

Open "TESTFILE" For Input As #1

Открытие файла

Do While Not EOF(l)

Цикл, пока не достигнут конец файла

Line Input #1, TextLine

Чтение строки в переменную

Debug.Print TextLine

Печать в окне Debug

Loop

Конец цикла

Close #1

Закрытие файла

2. Чтение данных из файла произвольного доступа

Данный оператор обеспечивает считывание записи файла произвольного доступа в указанную переменную:

597


Get Put [#номер_файла; [#записи],<переменная>

Пример 19.34. Чтение из файла произвольного доступа

Позиционирование на запись в файле

Позиция в записи (номер байта или номер записи) для очередного чтения или записи в файл устанавливается оператором:

Seek [#] номер_файла; позиция

где позиция число в диапазоне номеров байтов (1 - 2 147 483 647) файла.

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

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

Текст программы

Комментарий

Dim MyChar As String

Объявление переменной на основе

 

пользовательского типа данных

Open "FILE" For Input As #1

Открытие файла произвольного доступа с длиной,

 

соответствующей длине объявленного типа

MaxSize = LOF(l)

Вычисление количества байтов в файле

 

 

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

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

598