Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
02.05.2014
Размер:
928.77 Кб
Скачать

Работа с файлами последовательного доступа

Файлы последовательного доступа – это, как правило, текстовые файлы, т.е. последовательности ASCII-символов, организованные в строки.

При открытии таких файлов возможны три режима доступа:

  • Input – открыт для последовательного чтения данных;

  • Output – открыть файл для последовательной записи данных, при этом информация записывается всегда с начала файла (предыдущая затирается, если в файле уже что-то записано);

  • Append – открыть файл для добавления данных к уже имеющимся в файле (записи добавляются в конец файла).

Чтение данных

Если файл открывается для чтения, то он должен существовать, иначе возникнет ошибка!

Чтение данных из файла последовательного доступа выполняется с помощью функции Input и операторов Input # и Line Input #.

Функция Input считывает из файла заданное количество символов и обычно используется для чтения данных, записанных в файл оператором Print #.

Синтаксис

Input(number, #filenumber),

где

number - целое число, которое задает количество считываемых из файла символов;

filenumber - номер файла.

При использовании этой функции следует иметь в виду, что необходимо знать количество считываемых символов. Поэтому предварительно необходимо вычислить длину считываемого файла с помощью функции Fileline.

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

Синтаксис

Input #filenumber, varlist,

где

filenumber - номер файла,

varlist - список переменных.

При работе этого оператора сначала считывается целая строка, а затем подстроки, отделенные разделителями (запятыми), помещаются в соответствующие переменные списка.

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

Оператор Line Input # используется для построчного чтения данных из последовательного файла, обычно записанного оператором Print #.

Синтаксис

Line Input #filenumber, varname,

где

filenumber - номер файла,

varname - имя переменной.

Оператор посимвольно считывает всю строку данных из файла и помещает ее в строковую переменную. При этом разделителем строк в файле служит стандартный разделитель строк символ возврата каретки CHR(13) или последовательность символов возврата каретки и перевода строки CHR(13)+CHR(10), причем в переменную varname эти разделители не вставляются.

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

Запись данных

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

Print #иWrite #.

Оператор Write # дополнительно автоматически вставляет в файл разделители.

Еще раз. Каждая из функций записи работает в паре с определенной функцией чтения. Для оператораPrint #это функцияInputили операторLine Input #, а для оператораWrite # – это операторInput #.

Синтаксис

Print #filenumber, [outputlist]

Write #filenumber, [outputlist]

где filenumber – номер файла,

outputlist – список выражений или переменных для записи.

При выполнении записи данных в файл оператор и Write # автоматически вставляет символ перевода кареткиCHR(13) и символ новой строки CHR(10).

Замечание. Write # иInput #лучше применять для файлов бинарных и прямого доступа.

Переход на заданную позицию в файле

Переход на заданную позицию в файле можно организовать с помощью оператора Seek.

Синтаксис

Seek #filenumber, position

где filenumber – номер файла,

position – целочисленное выражение, задающее позицию указателя в файле. Позиционирование при этом выполняется посимвольно.

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

Примеры операторов работы с файлами

  1. Запись файла с помощью оператора Print #

    Dim pathfile As String

    Private Sub Command1_Click()

    pathfile = "C:\WINDOWS\Рабочий стол\primer\primer.txt" ‘имя файла

    Open pathfile For Output As #1 ‘открытие файла на запись

    Print #1, " Проверка работы с файлами VB " ‘запись в файл

    For i = 1 To 3

    Print #1, i ‘запись в файл

    Next

    Close #1

    End Sub

    Запись идет по строкам, если в Print использовать «;» запишется одна строка.

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

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

    Open pathfile For Append As #1

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

  2. Чтение файла с помощью функции Input

    Private Sub Command2_Click()

    Open pathfile For Input As #1 ‘открытие файла на чтение

    len_str = FileLen(pathfile) ‘определение числа символов в файле

    strfile = Input(len_str, #1) ‘считывание всех символов файла в строку

    Text2.Text = strfile ‘вывод строки в TextBox

    Close #1

    End Sub

  3. Чтение файла с помощью оператора Line Input #

Private Sub Command2_Click()

Open pathfile For Input As #1 ‘открытие файла на чтение

Do While Not EOF(1) ‘организация цикла на чтение файла до конца

Line Input #1, strfile ‘построчное чтение записей из файла в переменную

Text2.Text = Text2.Text + strfile + Chr(13) + Chr(10) ‘формирование очередной строки TextBox

Loop

Close #1

End Sub

TextBox имеет свойство MultiLine =True

  1. Запись файла с помощью оператора Write #

    Dim pathfile As String

    Private Sub Command1_Click()

    pathfile = "C:\WINDOWS\Рабочий стол\primer\primer.txt" 'имя файла

    Open pathfile For Output As #1 'открытие файла на запись

    Write #1, "Проверка работы с файлами" 'запись в файл

    For i = 1 To 3

    Write #1, "Строка", i 'запись в файл

    Next

    Close #1

    End Sub

  2. Чтение файла с помощью оператора Input #

Private Sub Command2_Click()

Open pathfile For Input As #1

Do While Not EOF(1)

Input #1, strfile

Picture1.Print strfile

Loop

Close #1

End Sub

Соседние файлы в папке Платов А.Ю. Введение в информатику