Кто разбирался в Задание 136 про жителей города и Задание 137 про мэрию, тот понимает, что исправление какой-то информации в текстовом файле, содержащем базу данных из 10000 записей, дело долгое, так как, чтобы исправить запись № 9001, нужно прочесть все 10000 записей, а затем вновь записать все 10000 записей. Поэтому никто не хранит базы данных в текстовых файлах. Для этого удобно применять так называемые типизированные файлы. Рассмотрим пример.
Задание. В стране спортом занимаются 4 миллиона спортсменов (мы для простоты возьмем 4 спортсмена). Про каждого спортсмена известны:
Требуется:
Создать файл с пронумерованными записями этой информации обо всех спортсменах страны
Процедуру чтения всех записей из файла
Процедуру чтения записи с указанным номером
Процедуру исправления записи с указанным номером
Создадим структуру
Structure типСпортсмен
Dim Фамилия As String
Dim Дата As DateTime
Dim Мужчина As Boolean
Dim Вес As Integer
End Structure
Поле Мужчина равно True если спортсмен мужчина, и False – если женщина.
Создадим массив структур для всех спортсменов страны:
Dim Сп(4) As типСпортсмен
Разместите на форме 4 кнопки.
Создаем файл с записями обо всех спортсменах страны:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Создаем в памяти компьютера информацию о всех спортсменах:
Сп(1).Фамилия = "Волков" : Сп(1).Дата = #12/30/1974# : Сп(1).Мужчина = True : Сп(1).Вес = 72
Сп(2).Фамилия = "Медведев" : Сп(2).Дата = #1/4/1942# : Сп(2).Мужчина = True : Сп(2).Вес = 96
Сп(3).Фамилия = "Лисицина" : Сп(3).Дата = #10/14/1981# : Сп(3).Мужчина = False : Сп(3).Вес = 60
Сп(4).Фамилия = "Зайцев" : Сп(4).Дата = #11/29/1978# : Сп(4).Мужчина = True : Сп(4).Вес = 48
'Записываем эту информацию в файл:
|
FileOpen (1, файл, OpenMode.Random) |
Открыть файл для типизированного доступа |
|
FileOpen (1, файл, OpenMode.Binary) |
Открыть файл для нетипизированного доступа (о нем ниже) |
|
FileOpen (1, файл, OpenMode.Input) |
Открыть текстовый файл для чтения |
|
FileOpen (1, файл, OpenMode.Output) |
Открыть текстовый файл для записи |
|
FileOpen (1, файл, OpenMode.Append) |
Открыть текстовый файл для дозаписи |
|
FileClose (1) |
Закрыть файл, открытый методом FileOpen |
|
FilePut (1, переменная, номер) |
Записать переменную в файл с произвольным доступом на место, указанное номером |
|
FileGet (1, переменная, номер) |
Прочесть переменную из файла с произвольным доступом с места, указанного номером |
|
Seek (1) |
На какой позиции в файле я нахожусь? |
|
Seek (1, позиция) |
Переместить головку в файле на указанную позицию |
|
Write (1, a, b, c, …) |
Записывает в текстовый файл значения переменных a, b, c и так далее. Переменные эти могут иметь разные простые типы. Интересно, что в файле они тоже отделяются друг от друга запятыми, а строковые данные, например, берутся в двойные кавычки. |
|
WriteLine (1, a, b, c, …) |
То же, что Write, но следующая запись начнется уже с новой строки |
|
Input (1, a) |
Обычно используется для правильного чтения из текстового файла того, что туда понаписали Write и WriteLine. За один раз читает одно очередное данное и сдвигает головку до следующей запятой или символа возврата каретки.. |
|
Print (1, a, b, c, …) |
Записывает в текстовый файл значения переменных a, b, c и так далее. Переменные эти могут иметь разные простые типы. |
|
PrintLine (1, a, b, c, …) |
То же, что Print, но следующая запись начнется уже с новой строки |
|
LineInput (1) |
Считывает из текстового файла очередную строку, какие бы и сколько бы данных в этой строке ни находилось. Обычно используется для чтения того, что записано методами Print и PrintLine. |
|
InputString (1, число символов) |
Считывает из файла указанное количество символов |
|
EOF (1) |
Правда ли, что достигнут конец текстового или типизированного файла? |
|
LOF (1) |
Длина открытого файла в байтах |