Файлы последовательного доступа
Последовательные файлы состоят из рядов строк текста, и их часто называют ASCII-файлами. Каждая строка текста завершается символом возврата каретки (ASCII13), а файл заканчивается символомCtrl-Z(ASCII26). Каждый символ текста занимает один байт. Текст можно просматривать и редактировать с помощью редактораNotepad (Блокнот).
С последовательным файлом можно работать в двух режимах: запись (или добавление данных) и чтение. Для создания последовательного файла необходимо открыть файл, записать данные и закрыть файл.
Файл открывается оператором вида:
Open "filename" For mode As #number
filename– полное имя файла,
mode – режим доступа к файлу:
Output – это режим, при котором файл открыт для записи; обычно при этом режиме создается новый файл; если открывается для записи уже существующий файл, то ранее хранимая информация будет стерта.
Input – это режим, при котором файл открыт только для чтения информации, записывать в файл при таком режиме нельзя;
Append – это режим, при котором файл открыт для записи, но в отличие от режима OUTPUT, при котором добавление новой информации приводит к уничтожению имеющейся, в режиме APPEND новая информация размещается в конце файла, за последней записью без уничтожения ранее имеющейся
number– идентифицирует файл в программе и может принимать значения от 1 до 255. Номер связан с файлом только тогда, когда файл открыт.
В последовательный файл данные записываютсяс помощью оператораPrintилиWrite. Каждый оператор записывает одну строку данных в файл, заканчивающуюся возвратом каретки. Формат операторов следующий:
Print #number, valuel, value2,...
Write #number, valuel, value2,...
Оператор Printзаписывает данные с метками между отдельными элементами. Он подходит для записи текстовых файлов с одним элементом на строку. ОператорWriteхранит данные в формате, разделенном запятыми.
Файл закрывается оператором Closeв формате
Close #number
Чтение последовательного файла, как и его создание, состоит из трех этапов: открытие файла, чтение данных и закрытие файла. Файл открывается с помощью оператора следующего вида:
Open "filename" For Input As #number
Данные из файла читаются с помощью одного из приведенных операторов:
Line Input #number, string
Input #number, variablel, variable2,...
Line Inputсчитывает строку полностью в переменнуюstringи может использоваться для чтения текстовых файлов, когда они записаны с помощью оператораPrint. Оператор считывает из файла по одному символу, пока не встретит символ «возврат каретки» или последовательность «возврат каретки» – перевод строки».
Inputсчитывает данные и размещает их в переменных заданного списка. Данные считываемые оператором записываются в файл с помощью оператораWrite#.
Последовательные файлы всегда должны читаться с начала файла. Для обнаружения конца файла можно использовать функцию EOF. После завершения чтения файл нужно закрыть с помощью командыClose.
Пример 1.
Sub filee()
‘открытие файла и запись в нее информации
Number = FreeFile
Open "d:\3.txt" For Output As #Number
Print #Number, "Это хранится в файле"
Close #Number
‘открытие файла и чтение из него информации
Number = FreeFile
Open "d:\3.txt" For Input As #Number
Input #Number, a$
MsgBox ("Чтение из файла: " & Chr(13) & a$)
Close #Number
End Sub
Пример 2.
Sub filee()
‘открытие файла и запись в нее информации
Number = FreeFile
n$ = InputBox("ВВедите имя файла")
Open n$ For Output As #Number
Print #Number, "Это хранится в файле"
Close #Number
‘открытие файла и чтение из него информации
Number = FreeFile
Open n$ For Input As #Number
Input #Number, a$
MsgBox ("Чтение из файла: " & Chr(13) & a$)
Close #Number
End Sub
Пример 3.
Sub filee()
Number = FreeFile
n$ = InputBox("ВВедите имя файла")
Open n$ For Output As #Number
Do
marka$ = InputBox("Введите марку автомобиля (для выхода QWE)")
If marka$ = "QWE" Then Exit Do
Inomer$ = InputBox("Введите номер автомобиля")
tsvet$ = InputBox("Введите цвет автомобиля")
god$ = InputBox("Введите год производства автомобиля")
tsena$ = InputBox("Введите продажную цену автомобиля")
'запись информации в файл
Write #Number, marka$, nomer$, tsvet$, god$, tsena$
Loop
'закрытие файла
Close #Number
MsgBox ("Внесение информации завершено")
Number = FreeFile
Open n$ For Input As #Number
i% = 1
Do Until EOF(Number)
Input #Number, marka$, nomer$, tsvet$, god$, tsena$
MsgBox "Данные об " & i% & " автомобиле" & Chr(13) & marka$ & Chr(9) & nomer$ & Chr(9) & tsvet$ & Chr(9) & god$ & Chr(9) & tsena$
i = i + 1
Loop
Close #Number
End Sub
Пример 4. Изменение содержания файла
Sub filee()
Open "c:\avto.txt" For Input As #1
Open "c:\avto2.txt" For Output As #2
Do
Input #1, marka$, nomer$, tsvet$, god$, tsena$
If marka$ = "москвич" Then marka$ = "ока"
Print #2, marka$, nomer$, tsvet$, god$, tsena$
Loop Until EOF(1)
Close #1, #2
'удаление исходного файла
Kill "c:\avto.txt"
' переименование нового файла
Name "c:\avto2.txt" As "c:\avto.txt"
End Sub
