- •Лабораторная работа №13.
- •Тема: Файлы в Visual Basic.
- •Теоретическая часть.
- •Традиционный подход при работе с файлами
- •Открытие файлов
- •Input #номер_файла, имя_переменной1, имя_переменной2, …
- •Переход на заданную позицию в файле
- •Запись данных
- •Работа с файлами произвольного доступа
- •Чтение данных из файла произвольного доступа
- •Seek #номер_файла, позиция
- •Запись в файл произвольного доступа
- •Изменение данных в файле произвольного доступа
- •Работа с двоичными файлами
- •Пример двоичного файла
- •Замечание
Input #номер_файла, имя_переменной1, имя_переменной2, …
где:
номер_файла — номер файла, аналогичный номеру файла в операторе Open;
имя_переменной1, имя_переменной2, … — список переменных.
При работе этого оператора сначала считывается целая строка, а затем подстроки, отделенные разделителями (запятыми), помещаются в соответствующие переменные списка. Для корректной работы оператора строки файла должны иметь заданную структуру с разделителями. Обычно этот оператор используется в паре с оператором записи Write #.
Для чтения всего содержимого файла при помощи оператора Input # необходимо организовать циклическое считывание данных из файла, поскольку данные считываются этим оператором по строкам.
Для построчного чтения данных из последовательного файла применяется оператор Line Input #. Синтаксис этого оператора следующий:
Line Input # номер_файла, имя_переменной
где:
номер_файла — номер файла, аналогичный номеру файла в операторе open;
имя_переменной — имя переменной, куда будет считана строка из файла.
Оператор Line Input # посимвольно считывает всю строку данных из файла и помещает ее в строковую переменную. При этом разделителем строк в файле служит стандартный разделитель строк символ возврата каретки CHR(13) или последовательность символов возврата каретки и перевода строки CHR(13) + CHR(10), причем в переменную эти разделители не вставляются.
Обычно оператор Line Input # используется в паре с оператором Print #.
Для того чтобы прочитать все данные из файла при помощи оператора Line Input #, необходимо организовать цикл чтения данных.
Например, откроем текстовый файл для чтения информации:
n=FreeFile
Open «C:\задача.txt» For Input As #n
Print #n, a
Close#n
Переход на заданную позицию в файле
Переход на заданную позицию в файле можно организовать с помощью оператора Seek, имеющего следующий синтаксис:
Seek #номер_файла, позиция
где:
номер_файла — номер файла, аналогичный номеру файла в операторе open;
позиция — целочисленное выражение, задающее позицию указателя в файле. Позиционирование при этом выполняется посимвольно.
Оператор Seek устанавливает указатель на требуемую позицию. Если после этого использовать функции чтения или записи, то действие этих функций будет выполняться начиная с позиции указателя, найденного оператором Seek.
Например, следующая команда установит указатель на позицию 77 (в переменной n хранится номер рабочего файла)
Seek #n, 77
Запись данных
Данные в файл последовательного доступа записываются с помощью операторов Print # и Write #. Оператор Write # дополнительно автоматически вставляет в файл разделители, но не дает гибкости при управлении форматированием данных. Как можно было заметить при изучении функций чтения данных, каждая из функций записи работает в паре с определенной функцией чтения. Для оператора Print # это функции Input или Line Input #, а для оператора Write # — это Input #.
Рекомендуется при применении операций записи/чтения данных из файлов использовать именно такие пары функций и операторов записи/чтения.
Рассмотрим оператор Print #. Он имеет следующий синтаксис:
Print #номер_файла, список
где:
номер_файла — номер файла, аналогичный номеру файла в операторе Open;
список — список выражений или переменных для записи.
Оператор Write # имеет следующий синтаксис:
Write #номер_файла, список
где:
номер_файла — номер файла, аналогичный номеру в операторе Open;
список — список выражений или переменных для записи.
При выполнении записи данных в файл оператор Write # после каждой строки автоматически вставляет символ перевода каретки CHR(13) и символ новой строки CHR(10).