Позиционирование на запись в файле
Ввод информации из файла
1. Чтение данных из последовательного файла Чтение выполняется оператором:
Input #номер_файла; <список_переменных>
Двойные кавычки при считывании игнорируются, выполняется проверка соответствия типов данных переменных и файла.
Пример 19.32. Запись в файл произвольного доступа
Текст программы | Комментарий |
Open "FILE" For Input As #1 Do While Not EOF(1) Input #1; MyString; MyNumber Debug.Print MyString; MyNumber Loop Close #1 | Открытие файла Цикл до конца файла Чтение данных записи в переменные Печать считанных данных Конец цикла Закрытие файла |
Другим оператором чтения из последовательного файла является
Line Input #номер_файла; <переменная>
Оператор обеспечивает посимвольное считывание данных строки по файлу до обнаружения символа "возврат каретки" (Сhг(13)) и присвоение этих данных указанной переменной символьного типа.
Пример 19.33. Построчное чтение из файла последовательного доступа
Текст программы | Комментарий |
Open "TESTFILE" For Input As #1 Do While Not EOF(1) Line Input #1, TestLine Debug.Print TextLine Loop Close #1 | Открытие файла Цикл, пока не достигнут конец файла Чтение строки в переменную Печать в окне Debug Конец цикла Закрытие файла |
2. Чтение данных из файла произвольного доступа
Данный оператор обеспечивает считывание записи файла произвольного доступа в указанную переменную:
Get Put [#номер_файла; [#записи],<переменная>
Пример 19.34. Чтение из файла произвольного доступа
Текст программы | Комментарий |
Type Record | Объявление пользовательского типа данных для записи |
ID As Integer Name As String * 20 End Type | |
Dim MyRecord As Record | Объявление переменной на основе пользовательского типа данных |
Open "FILE" For Random As #1 Len=Len(MyRecord) | Открытие файла произвольного доступа с длиной, соответствующей длине объявленного типа |
Psition=3 Get #1, Position, MyRecord Close #1 | Задание номера ( индекс) записи Формирование содержимого записи Закрытие файла |
Позиция в записи (номер байта или номер записи) для очередного чтения или записи в файл устанавливается оператором:
Seek [#] номер_файла; позиция
где позиция.- число в диапазоне номеров байтов (1-2147483 647) файла.
Для файла, открываемого в режиме последовательного доступа, с помощью оператора SEEK определяется байт.
Пример 19.35. Позиционирование в файле последовательного доступа
Текст программы | Комментарий |
Dim MyChar As String | Объявление переменной на основе пользовательского типа данных |
Open "FILE" For Input As #1 | Открытие файла произвольного доступа с длиной, соответствующей длине объявленного типа |
MaxSize=LOF(1) | Вычисление количества байтов в файле |
For NextChar- MaxSize To Step -1 | Организация цикла для последовательного считывания записей от конца файла к его началу |
Seek #1, NextChar MyChar= Input(1,#1) Next NextChar | |
Close #1 | Закрытие файла |
Для файла, открываемого в режиме произвольного доступа, определяется очередной номер записи, с которой будет работать программа.
Пример 19.36. Позиционирование в файле произвольного доступа
Текст программы | Комментарий |
Type Record | Объявление пользовательского типа данных для записи |
ID As Integer Name As String * 20 End Type | |
Dim MyRecord As Record | Объявление переменной на основе пользовательского типа данных |
Open "FILE" For Random As #1 Len=Len(MyRecord) | Открытие файла произвольного доступа с длиной, соответствующей длине объявленного типа |
MaxSize=LOF(1)\ Len(MyRecord) Get For RecordNumber=MaxSize To 1 Step-1 | Вычисление количества записей в файле Организация цикла для последовательного считывания записей от конца файла к его началу |
Seek #1, RecordNumber Get #1, , MyRecord Next RecordNumber | |
Close #1 | Закрытие файла |