Урок: Работа с файлами в Visual
Basic
Цель: Познакомить учащихся с возможностями
записи в файл и считывания из файлов в Visual Basic. Развивать навыки работы с
файлами. Воспитывать грамотных пользователей ПК.
I орг. момент (посадка, перекличка)
II Объяснение нового материала.
Иногда бывает нужно, чтобы после завершения работы программы,
данные, созданные в оперативной памяти компьютера, не пропали а были записаны
на диск. При запуске программы тогда можно воспользоваться уже имеющимися
данными. Для этого необходимо уметь читать данные с диска и сохранять их на
диске. Этими вопросами мы займемся в настоящем занятии.
В проекте Анимация предыдущего при
копировании элемента Image1 мы получили элементы с именами
Image1(0), Image1(1), Image1(2) и т.д. Такие элементы называются массивом. Предположим, что нам
надо сформировать массив не элементов, а некоторого списка названий предметов.
В случаях, когда информационный массив не очень велик, его можно формировать
прямо в окне программы, но если массив большой, а в реальной жизни мы имеем
дело именно с такими задачами, его целесообразно хранить на диске в отдельном
файле. Когда это необходимо, данные из файла нужно уметь взять с помощью
программы для использования, а полученные после обработки данные записать на
диск в виде файла. Так можно, например, было бы не только распечатать свой
массив названий предметов на форме, но и записать его на диск.
Рассмотрим основные принципы работы с файлами.
В Visual Basic реализованы три типа доступа к файлам:
- последовательный – для чтения и записи
текстовых файлов;
- произвольный – для чтения и записи текста с
записями структурированной длины;
- двоичный – для чтения и записи произвольно
структурированных файлов.
Мы в настоящей тетради будем рассматривать только
последовательный доступ. Данные в файле хранятся при этом в неструктурированном
виде.
Работа с файлами данных всегда состоит из нескольких этапов:
- получение дескриптора файла;
- открытие файла;
- чтение или запись данных;
- закрытие файла.>
Рассмотрим все перечисленные этапы
поочередно.
Дескриптор файла. Чтобы работать с файлами, нужно понимать, как связывается система с
файлом. Для этого имеется канал ввода-вывода. При открытии файлу ставится в
соответствие канал с определенным номером. Каждый открытый файл имеет
собственный канал, с помощью которого записываются или считываются данные. Для
ввода и вывода данных имеет значение не имя файла, а номер канала.
Функция Visual Basic FreeFile возвращает номер
свободного канала, который можно использовать для работы с файлом. intFh
= FreeFile( )
В этом примере переменной intFH присваивается
целое значение, которое можно использовать для открытия файла.
Открытие файла. Способ открытия файла с последовательным доступом (для чтения, записи
или добавления) задается при вызове оператора Open.
Open Имя_файла For [Input \ Output \ Append] As FileHandle
Если в операторе использовано слово Input, то файл
открывается только для чтения из файла. Если файл не существует и открывается
для чтения, то Visual Basic выдает сообщение об ошибке.
Если в операторе использовано слово Output, то файл
открывается для записи. Если файл с таким именем уже существует, то его
содержимое удаляется. Если файла с таким именем нет на диске, то создается
новый файл.
Если в операторе использовано слово Append, то файл открывается
для добавления. Если файла с таким именем нет, то он создается.
В конце оператора указывается номер канала, возвращаемый
функцией FreeFile. Приведем несколько примеров использования оператора Open
при последовательном доступе.
Open “Text . txt” For Input As intFH1
Open “C: / DAN / Text . txt” For Output As intFH2
Open “Proba . txt” For Append As intFH3
Чтение данных из файла. Для считывания данных из файла, открытого
для последовательного доступа, существует несколько возможностей. В общем
случае это осуществляется с помощью оператора Input, имеющего несколько
разновидностей.
1)Line Input # считывает
одну строку;
2)Input # считывает
последовательность символов, обычно записанных с помощью оператора Write #;
3)Input$ считывает
определенное количество символов.
Существует несколько вариантов чтения всей информации из
файла. Перед чтением нужно открыть файл с помощью оператора Open…For Input:
IntFH = FreeFile
Open “Tex t .txt” For Input As intFH
Первый вариант
Do Until EOF(intFH)
Line Input #intFH, strString
StrText = strText & strString &
vbLf
Loop
Второй вариант
StrText = Input $ (LOF(intFH), intFH)
Оба варианта приводят к одинаковому результату. В первом
варианте оператор Input выполняется в цикле, пока не будет достигнут
конец файла. Функция EOF(End Of File) возвращает значение True
при достижении конца файла. При этом на каждом шаге цикла считывается
отдельная строка и к ней добавляется символ конца строки, который отбрасывается
оператором Line Input.
Во втором варианте весь файл считывается функцией Input $. Функция
LOF (Length Of File) позволяет определить длину файла в битах.
Независимо от вида оператора Input указывается не имя
файла, а только номер канала, т.е. дескриптор файла (intFH).
Запись данных в файл. В Visual Basic для записи информации в файл используются
операторы Print # и Write #.
Оператор Print #. Для сохранения данных в
файле нужно открыть файл для записи или добавления оператором Open (Open…
For Output или Open … For Append), а потом применить оператор Print
#.
Если в операторе данные разделять запятыми, то в файле они
будут разделены символами табуляции:
Print #intFH, “Фрагмент1”, “Фрагмент2”
Эта строка соответствует строке:
Print #intFH, “Фрагмент1”; Tab ;“Фрагмент2”
Если в операторе для разделения данных использовать точку с
запятой, то данные в файл записываются без разделителей:
Print #intFH, “Фрагмент1” ; “Фрагмент2”
Эта строка соответствует строке
Print #intFH, “Фрагмент1 Фрагмент2”
Оператор Write #. Этот оператор имеет
такой же синтаксис, что и оператор Print #. Отличие состоит в
форматировании вывода. Если Print # сохраняет данные в виде обычного
текста, то Write # заключает текстовые строки в кавычки, а цифры
выводятся без кавычек.
Print #intFH, “Мама”,”Папа”, 7645
В файле будет: Мама Папа 7645
Write #intFH, “Мама”,”Папа”, 7645
В файле будет: “Мама”, “Папа”, 7645
Данные, сохраненные с помощью оператора Write#, можно
считать оператором Input #.
Закрытие файла Для
закрытия открытого файла или канала предназначен оператор Close. Например,
Close #intFH
III Практическая работа на
компьютере. Модификация проекта prjSubjects
Попробуем модифицировать проект prjSubjects таким
образом, чтобы стандартный массив названий предметов считывался из файла Standart.txt,
а итоговый массив названий предметов, которые в настоящий момент времени изучает
пользователь, он будет иметь возможность записать в файл MySubject.txt.
Предварительно создадим файл Standart.txt и запишем в
него с помощью отдельной процедуры массив из 16 наименований предметов. Будем
использовать для этого оператор Write #.
Dim S(15) As String
Dim intFH As Integer
Dim i As Integer
S(0) = "родной язык"
S(1) = "литература"
S(2) = "алгебра"
S(3) = "геометрия"
S(4) = "физика"
S(5) = "химия"
S(6) = "иностранный
язык"
S(7) = "биология"
S(8) = "география"
S(9) =
"информатика"
S(10) = "технология"
S(11) = "музыка"
S(12) = "изобразительное
искусство"
S(13) =
"физкультура"
S(14) =
"астрономия"
S(15) =
"психология"
intFH = FreeFile
Open "Standart.txt" For Output As intFH
For i = 0 To 15
Write #intFH, S(i)
Next i
Close #intFH
В приведенном листинге используется "короткое" имя
файла Standart.txt. Имеется в виду относительная адресация. (Проект
запускается из текущего каталога и файл Standart.txt помещается в этот
же каталог). Если же вы загружаете проект из среды VB, то нужно прописывать
полный путь файла Standart.txt.
Теперь рассмотрим, какие изменения нам придется произвести в
проекте. Нам придется изменить процедуру Inpt( ), которая находится в
модуле кода, так, чтобы массив наименований предметов считывался из файла Standart.txt.
Считывать информацию из файла будем с помощью оператора Input #, так
как записана она была оператором Write #. Тогда процедура примет вид:
Public Sub Inpt( )
Dim intFH As Integer
Dim i As Integer
intFH = FreeFile( )
Open "Standart.txt" For Input As
intFH
Do Until EOF(intFH)
Input #intFH, nameSubject(i)
i = i + 1
Loop
Close #intFH
End Sub
Во второй форме frmMySubj необходимо предусмотреть
возможность записи значений полученного пользователем массива nameSubject. Для
этого поместим на вторую форму еще одну командную кнопку cmdWrite с
значением свойства Caption “Запись в файл”. Составим соответствующий
код:
Private Sub cmdWrite_Click( )
Dim i As Integer
intFH = FreeFile
Open "MySubject.txt" For Output
As intFH
For i = 0 To 15
Write #intFH, nameSubject(i),
Next i
Close #intFH
End Sub
Везде имеется в виду относительная адресация. (Загружаете
проект вы из текущего каталога).
Внесите все эти изменения в свой проект и опробуйте его
работу.
IV Итог урока
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.