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

Лабораторная работа №4

Работа с последовательным и произвольным файлами

При последовательном доступе файл рассматривается как последовательность строк произвольной длины, разделенных специальными знаками. Чтение из файла и запись в файл производится построчно. Создадим простейший текстовый редактор, в который можно загрузить из файла уже существующий текст, отредактировать его и записать измененный текст в файл. Имя открываемого файла вводится в переменную ИмяФайла. Свободный номер для файла получается при помощи функции FreeFile и записывается в переменную Number.

UserForm_Initialize

  1. Активизирует диалоговое окно.

  2. Отображает переключатель Подсказка и скрывает поле и кнопку Сохранить изменения?

  3. Устанавливает свойства поля, кнопки, а также задает заголовок диалогового окна.

ToggleButton1_Click

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

Нажатие кнопки

Сохранить изменения?

запускает на выполнение процедуру

CommandButton1_Click

Записывает содержимое поля в файл

Открытие и запись

Процедуры считывают содержимое файла в поле и записывают содержимое поля в файл соответственно.

Option Explicit

Dim imfile As String

Dim number As Integer

Private Sub CommandButton1_Click()

zapis

End Sub

Private Sub ToggleButton1_Click()

number = FreeFile

imfile = "d:\test.txt"

If ToggleButton1.Value = True Then

TextBox1.Visible = True

CommandButton1.Visible = True

otkr

End If

If ToggleButton1.Value = False Then

TextBox1.Visible = False

CommandButton1.Visible = True

End If

End Sub

Private Sub UserForm_Initialize()

With TextBox1

.MultiLine = True

.ScrollBars = fmScrollBarsBoth

.Visible = False

End With

ToggleButton1.TripleState = False

With CommandButton1

.WordWrap = True

.Visible = False

End With

UserForm1.Caption = "Файл последовательного доступа"

End Sub

Sub zapis()

Open imfile For Output As number

Print #number, TextBox1.Text

Close number

End Sub

Sub otkr()

Open imfile For Input As number

TextBox1.Text = Input(LOF(number), number)

Close number

End Sub

Произвольный доступ

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

Реализуем простейшую базу данных, предназначенную для хранения информации о студентах: фамилии, имени и группе. Диалоговое окно Информация о студентах, а при выводе информации о текущем студенте – его имя и фамилия. При активизации диалогового окна доступными для пользователя являются только поле со списком и кнопка открытие файла. В поле со списком отображаются все файлы текущей папки с расширением dat. Пользователь может выбрать файл из этого списка или ввести в поле имя нового файла. После ввода имени файла поле со списком и кнопка открытие файла становятся недоступными для пользователя, а все остальные элементы управления, наоборот становятся доступными. На стандартном листе модуля описан пользовательский тип StudentType, который используется в модуле UserForm1 для объявления переменной данного типа. Эта переменная задает структуру в файле произвольного доступа. Имя открываемого или вновь создаваемого файла вводится в переменную imfile. Свободный номер для файла получается при помощи FreeFile и записывается в переменную Number.

UserForm_Initialize

  1. Активизирует диалоговое окно

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

  3. Задает первоначальный заголовок диалогового окна и надписи с номером текущей записи.

  4. Выводит рисунки (стрелки) на поверхность двух кнопок.

Нажатие кнопки Открытие файла запускает на выполнение процедуру

CommandButton4_Click

  1. Открывает или создает файл по имени, которое введено в поле со списком Открытие файла.

  2. Считывает первую запись из файла в диалоговое окно при помощи процедуры ПоказатьЗапись.

  3. При помощи процедуры Управление задает режим доступа к элементам управления: пользователю теперь недоступны поле со списком и кнопка Открытие файла, а все остальные элементы управления, наоборот, становятся доступными.

  4. В надписи с номером текущей записи выводится также общее число записей открытого файла.

SpinButton1

  1. Устанавливает границы изменения счетчика. Отметим, что верхняя граница значения счетчика – число записей, может изменяться по ходу программы.

  2. Выводит текущее значение счетчика в поле Номер записи.

  3. Считывает текущую запись из файла в диалоговое окно при помощи процедуры ПоказатьЗапись.

Нажатие кнопки Новая запись запускает на выполнение процедуру

CommandButton1_Click

Создает новую запись в конце файла.

Нажатие кнопки Записать изменения запускает на выполнение процедуру

CommandButton2_Click

Считывает из диалогового окна в текущую запись файла информацию при помощи процедуры ЗаписатьЗапись.

Нажатие кнопки Закрыть запускает на выполнение процедуру

CommandButton3_Click

Закрывает открытый файл и диалоговое окно.

Нажатие кнопки

запускает на выполнение процедуру

CommandButton5_Click

Осуществляет переход на последнюю запись.

Нажатие кнопки

запускает на выполнение процедуру

CommandButton6_Click

Осуществляет переход на первую запись.

ПоказатьЗапись

Выводит в поля диалогового окна запись с номером, указанным в переменной ТекущаяЗапись

ЗаписатьЗапись

Записывает в файл из полей диалогового окна запись с номером, указанным в переменной Текущая Запись

Option Explicit

Dim student As studtype

Dim dlfile As Long

Dim dlzapis As Long

Dim tekzap As Long

Dim endrec As Long

Dim imfile As String

Dim number As Integer

Sub Pokaz()

Get #number, tekzap, student

With student

TextBox1.Text = Trim(.fam)

TextBox2.Text = Trim(.imja)

TextBox3.Text = Trim(.gruppa)

TextBox4.Text = tekzap

'UserForm2.Caption = TextBox1.Text & " " & TextBox2.Text

End With

End Sub

Sub zapis()

With student

.fam = TextBox1.Text

.imja = TextBox2.Text

.gruppa = TextBox3.Text

End With

Put #number, tekzap, student

End Sub

Private Sub CommandButton1_Click()

UserForm2.Caption = "Информация о студентах"

endrec = endrec + 1

tekzap = endrec

With student

.fam = ""

.imja = ""

.gruppa = ""

End With

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = CStr(endrec)

End Sub

Private Sub CommandButton2_Click()

zapis

Label4.Caption = "Номер записи из " & endrec

End Sub

Private Sub CommandButton3_Click()

Close #number

UserForm2.Hide

End Sub

Private Sub CommandButton4_Click()

Dim nach As Boolean

If ComboBox1.Text <> "" Then

upravlenie zap:=True, fil:=False

imfile = Trim(ComboBox1.Text)

dlzapis = Len(student)

number = FreeFile

Open imfile For Random As number Len = dlzapis

tekzap = 1

endrec = FileLen(imfile) / dlzapis

nach = True

If endrec = 0 Then

UserForm2.Caption = "Информация о студентах"

endrec = 1

nach = False

End If

Pokaz

If nach = False Then

UserForm2.Caption = " Информация о студентах "

End If

TextBox1.SetFocus

Label4.Caption = " Номер записи из " & endrec

Else

MsgBox "dfg", vbOKOnly, "Error"

End If

End Sub

Private Sub CommandButton5_Click()

tekzap = endrec

SpinButton1.Value = endrec

Pokaz

End Sub

Private Sub CommandButton6_Click()

SpinButton1.Value = 1

tekzap = 1

Pokaz

End Sub

Private Sub SpinButton1_Change()

SpinButton1.Min = 1

SpinButton1.Max = endrec

tekzap = SpinButton1.Value

Pokaz

End Sub

Private Sub UserForm_Initialize()

Dim papka, imfile As String

Dim dlputi, i As Integer

upravlenie zap:=False, fil:=True

UserForm2.Caption = " Информация о студентах "

Label4.Caption = " Номер записи "

ComboBox1.Clear

papka = CurDir

dlputi = Len(papka)

With Application.FileSearch

.FileName = "*.dat"

.SearchSubFolders = False

If .Execute(SortBy:=msoSortByFileName, sortorder:=msoSortOrderAscending) > 0 Then

For i = 1 To .FoundFiles.Count

imfile = Right(.FoundFiles(i), Len(.FoundFiles(i)) - dlputi - 1)

ComboBox1.AddItem imfile

Next i

End If

ComboBox1.ListIndex = 0

End With

End Sub

Sub upravlenie(zap As Boolean, fil As Boolean)

Dim element As Object

For Each element In Controls

element.Enabled = zap

Next element

CommandButton4.Enabled = fil

ComboBox1.Enabled = fil

End Sub

Самостоятельное задание

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

  2. Обработайте все возможные ошибки при работе программы.

Соседние файлы в папке Лаб.4 Лебедев А.В
  • #
    24.05.2015120.83 Кб14Labrab4_15.doc
  • #
    24.05.201518.16 Кб15задание.xlsm
  • #
    24.05.201568 б14заданиею.txt
  • #
    24.05.201514.8 Кб15последовательный доступ.xlsm
  • #
    24.05.201524.99 Кб14произвольный доступ.xlsm