Практическая работа по теме Приемы работы с различными источниками данных 1 Задание Элементы управления MainMenu, OpenFileDialog и SaveFileDialog 1




Скачать 329.88 Kb.
страница4/6
Дата14.07.2016
Размер329.88 Kb.
1   2   3   4   5   6

Задание 5. Использование не типизированных файлов (файлов последовательно доступа)

Задача


Рассмотреть стандартные средства VB.NET для записи данных в не типизированные файлы, состоящих из набора записей разной длины.

Решение


Использовать процедуры FileOpen, FileGetObject, FilePutObject, FileClose для выполнения операций по открытию, записи и закрытию не типизированного файла.

Обсуждение


Не всегда файл имеет какую-либо ярко выраженную внутреннюю структуру. Нередко ее нет вовсе или же она нас мало интересует. Есть и другие причины использовать не типизированные файлы. К примеру, наша картотека обладает одной особенностью: каждая карточка, хранимая в типизированном файле, занимает 39 байт независимо от реального размера. Такой способ хранения нельзя назвать экономным – в итоге существенная часть файла может расходоваться впустую. Зато доступ к любой записи осуществляется очень просто, поскольку все записи имеют одинаковый размер вычислить положение записи в файле нетрудно.

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

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

При работе с файлами последовательного доступа в качестве режима работы при открытии файла указывается OpenMode.Binary, а чтение и запись производится при помощи уже хорошо известных процедур:



FileGetObject (filenumber,var)

FilePutObject (filenumber, var, смещение)

При этом значение параметра «смещение» будет обозначать смещение в байтах от начала файла, а не номер записи. Самая первая запись имеет смещение 1, смещение каждой последующей можно вычислить по следующей формуле: 1+LOF(filenumber).

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

Модифицированная процедура записи в файл выглядит следующим образом:



Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

Dim str As String

FileOpen(1, "L:\22.dat", OpenMode.Binary)

FilePutObject(1, TextBox1.Text, 1 + LOF(1))

If RadioButton1.Checked Then str = "ж" Else str = "м"

FilePutObject(1, str, 1 + LOF(1))

FilePutObject(1, TextBox2.Text, 1 + LOF(1))

FilePutObject(1, ComboBox1.SelectedItem, 1 + LOF(1))

FileClose(1)

TextBox1.Text = ""

TextBox2.Text = ""

ComboBox1.SelectedIndex = -1

End Sub


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

Рис. 5.11.Измененный интерфейс картотеки

Модифицированная процедура для просмотра записей из файла (командная кнопка Просмотреть по смещению) выглядит так:

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

Dim fio, gender, pAge, country As String

Dim n As Integer = CType(TextBox3.Text, Integer)

Dim i As Integer

FileOpen(1, "L:\22.dat", OpenMode.Binary)

For i = 1 To n

FileGetObject(1, fio)

FileGetObject(1, gender)

FileGetObject(1, pAge)

FileGetObject(1, country)

Next

FileClose(1)



Label5.Text = fio

If gender = "ж" Then RadioButton3.Checked = True Else RadioButton4.Checked = True

Label7.Text = pAge

Label9.Text = country

End Sub


Модифицированная процедура для просмотра записей из файла (командная кнопка >>) выглядит так:

Dim number As Integer

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

Dim fio, gender, pAge, country As String

Dim i As Integer

FileOpen(1, "L:\22.dat", OpenMode.Binary)

number += 1

For i = 1 To number

FileGetObject(1, fio)

FileGetObject(1, gender)

FileGetObject(1, pAge)

FileGetObject(1, country)

Next


FileClose(1)

Label5.Text = fio

If gender = "ж" Then RadioButton3.Checked = True Else RadioButton4.Checked = True

Label7.Text = pAge

Label9.Text = country

End Sub


Модифицированная процедура для просмотра записей из файла (командная кнопка <<) выглядит так:

Dim number As Integer

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

Dim fio, gender, pAge, country As String

Dim i As Integer

FileOpen(1, "L:\22.dat", OpenMode.Binary)

number -= 1

For i = 1 To number

FileGetObject(1, fio)

FileGetObject(1, gender)

FileGetObject(1, pAge)

FileGetObject(1, country)

Next


FileClose(1)

Label5.Text = fio

If gender = "ж" Then RadioButton3.Checked = True Else RadioButton4.Checked = True

Label7.Text = pAge

Label9.Text = country

End Sub

Самостоятельно


Добавьте в ваше приложение (с дополнительной информацией о туристе) возможность работы с не типизированным файлом.

Самостоятельно*


В процедурах последовательного перемещения по записям не типизированного файла нет проверок на допустимость смещения как вперед, так и обратно. Введите соответствующие ограничения.
1   2   3   4   5   6


База данных защищена авторским правом ©uverenniy.ru 2016
обратиться к администрации

    Главная страница