Лекция № 22. Работа с файлами
Страница 3. Файлы последовательного доступа
Последовательные файлы состоят из рядов строк текста, и их часто называют ASCII-файлами. Каждая строка текста завершается символом возврата каретки (ASCII 13), а файл заканчивается символом Ctrl-Z (ASCII 26). Каждый символ текста занимает один байт. Текст можно просматривать и редактировать с помощью редактора 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
nomer$ = 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 "d:\3.txt" For Input As #1
Open "d:\4.txt" For Output As #2
Do
Input #1, marka$, nomer$, tsvet$, god$, tsena$
If marka$ = "KIA" Then marka$ = "Opel"
Print #2, marka$, nomer$, tsvet$, god$, tsena$
Loop Until EOF(1)
Close
'удаление исходного файла
Kill "d:\3.txt"
' переименование нового файла
Name "d:\4.txt" As "d:\3.txt"
End Sub