Последовательные файлы

282295
знаков
41
таблица
133
изображения

3.7.1. Последовательные файлы

Каждая запись последовательного файла представляет собой строку символов, в конце которой содержится символ <CR>, обозначающий переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающий переход на другую строку (line feed, ASCII-код равен 10). Последовательное действие этих двух символов обеспечивает переход к новой записи. После последней записи записывается признак конца файла (end of file), который может проверяться встроенной функцией EOF (возвращает значение True. если обнаружен конец файла, и False, в противном случае).

Для получения доступа к файлу для операции ввода-вывода используется оператор открытия файла, синтаксис которого следующий

Open имя_файла For {Append Input | Output} As #номер_фаила fLen = размер буфера памяти}

где Open, For. Append. Input. Output, As — ключевые слова.

Input — файл открывается для ввода.

Output — файл открывается для вывода.

Append — устанавливает считывающе-записывающее устройство на конец файла и выводимая информация записывается в файл после существующих записей (при значении параметра Output выводимая информация записывается с начала файла, т.е. происходит перезапись файла, если в нем существовали записи).

Имя_файла — имя файла (символьная константа или переменная) или путь. Имя файла в DOS и Windows 3.1 состоит из не более чем восьми буквенных (латинских) или цифровых символов (первый символ буква), за которым может следовать расширение, определяющее тип файла (VBPART3.DOC, Project. MAC). В Windows 95 допускаются длинные имена файлов до 255 символов, включая специальные символы (в русской версии для записи имени файла можно использовать русские буквы) Путь определяет местонахождение файла в иерархической системе каталогов (C:\CONF1G.SYS, C:\WINDOWS\VB).

Номер файла — целочисленное выражение, значение которого должно лежать в диапазоне от 1 до 255 (присваиваемый файлу номер).

Len — определяет размер буфера операций ввода-вывода (по умолчанию 512 Кб).

Примеры:

Open “С:\CONFIC.SYS” For Input As tt5 'открывается

файл с именем CONFIG.SYS в директории С: для ввода

и ему присваивается номер 5

Doc$ = “a:\Utilits\NC.DOC”

присвоение значения константе

Open Doc$ For Input A.s ft 5

'открытие файла NC.DOC на диске А: в директории Utilits для ввода, файлу присваивается номер 2

Open “Resulc. t:-:t “ For Output As tt7

'открытие файла для вывода.

Если открывается для вывода несуществующий файл. то он создается при значениях параметров Append и Output. Если для ввода открывается несуществующий файл, то Visual Basic сообщает об ошибке. Если файл скрывается для вывода Visual Basic всегда создает новый файл, перезаписывая в него любой имеющийся на диске файл с тем же именем.

Существование файла перед открытием можно проверить с помощью встроенной функции Dir$ (возвращает строку с копией имени файла, если указанный файл существует, либо пустую строку в противном случае).

Пример.

If Dir$(“FilePrim.Txt”) <> “” Then

.Open “FilePrim.Txt” For Input As #12

End If

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

Close #номер_фачла где Close — ключевое слово;

номер_ файла соответствует номеру в операторе Open.

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

Line Input #номер_файла, имя_переменной где Line Input — ключевое слово;

номер_файла — номер файла, совпадающий с номером в операторе Open (вводится информация из открытого файла);

имя_переменной — имя переменной, которая принимает значение записи файла, типа String или Variant.

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

Встроенная функция EOF (аббревиатура английских слов End Of File - конец файла) позволяет проверять при чтении файла: достигнут конец файла или нет. Значением аргумента функции EOF является номер считываемого файла. Функция возвращает значение True, если достигнут конец файла, и False - в противном случае.

Пример.

Dim FileYura, Sr.rokaVvoda As String

'объявление символьных переменных

Open FileYura For Input As #5

'открытие файла FileYura для ввода Do While Not EOF(5)'цикл последовательного чтения

'записей файла пока не достигнут конец Line Input #5, StrokaVvoda'ввод считанной записи

'в переменную StrokaVvoda LineRead StrokaVvoda 'обращение к

'процедуре обработки строки LineRead 'аргументом которой является переменная StrokaVvoda Loop

Close #5 'закрытие файла

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

{Print* Write} ”номер_файла,[[{8рс(ч) |Tab(n)}]

[ выражение}[{,\;}}} где Print, Write — ключевые слова.

Print# — обеспечивает вывод в последовательный файл в формате дисплея (т.е. аналогично выводу на печать, например, на форме).

выражение - выражение, значение которого записывается в файл.

Если выражения разделяются “;”, то в файл они записываются без пробелов слитно.

Если выражения разделяются “,”, то в файл они записываются в фиксированные зоны длиной 14 символов (зонный формат).

Если в конце выражения не стоит “;” или “,”, то выведенная в файл строка дополняется символами <CR>, обозначающими переход к началу строки (carriage return, ASCII-код равен 13), и <LF>, обозначающими переход на другую строку (line feed, ASCII-код равен 10). Т.о. каждому значению соответствует одна запись или одна строка при выводе в формате дисплея.

Spc(n) и ТаЬ(п) определяют соответственно вставку п пробелов между выводимыми выражениями и табуляцию на п колонок перед списком выражений.

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

Kill имя_файла где Kill — ключевое слово.

В заключение следует отметить, что данные любого типа (Boolean, Data, Integer, Single, Double, Currency) записываются в файл в символьной форме. При выводе данные преобразуются к символьной форме, при вводе происходит их преобразование к первоначальному типу, па что затрачиваются ресурсы компьютера. Кроме того. представление данных в символьной форме неэффективно. Например, число 421596 типа Single -занимает в памяти компьютера 4 банта, но при записи в последовательны” файл - 7 байт: 1 байт па каждый символ.

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

Пример программы.

В первой части процедуры обработки события щелчка мыши по форме в файл TE5TFILE выводятся строки символов с использованием оператора Print# (вывод в формате дисплея). Во второй части процедуры записи этого файла читаются и выводятся в окно вывода в том виде, как они записаны в файле.

Текст процедуры:

Пример программы.

Программа осуществляет преобразование текстового файла последовательною доступа распаковкой его строк таким образом, чтобы каждая цепочка символов “*п”, где п — однозначное целое число (число пробелов), заменялась указанным числом пробелов.

Ввод исходных данных и управление работой программы осуществляется на форме на рис. 3.24.

На форме располагаются:

командная кнопка “Ввод” (имя — Command 1), щелчок мыши по которой активизирует окно ввода (имя — Textl). Вводимая информация записывается в файл последовательного доступа: командная кнопка “Вывод” (имя — Commands), щелчок мыши по которой обеспечивает вывод записей файла в многострочном текстовом окне (имя Text2): командная кнопка “Преобразование” (имя — Command2), щелчок мыши по которой обеспечивает чтение записей файла, их преобразование в соответствии с заданием и запись новых записей в другой файл: командная кнопка “Вывод” (имя — Command4). щелчок мыши по которой обеспечивает вывод записей повою файла в многострочном текстовом окне (имя Textl); щелчок мыши по кнопке “Конец” прекращает выполнение программы.

Тексты процедур обработки событий:

Private Sub Coriurtandl_Click ()

Text3.SetFocus Open “Filel” For Output As #5

Text3.Text = “” End Sub

Private Sub Command2_Click() Dim Filedata, Filedatal As String Dim NPoz, NProbel As Integer Close #5

Open “Filel” For Input As tt5 Open “File2” For Out-put As #6 Do While Not EOF(5) Line Input #5, Filedata Filedatal = “” 1=1 Do While InStrfI, Filedata, “*”) > 0

NPoz = InStr(I, Filedata, “*”) Filedatal = Filedatal + Mid$(Filedata, 1, NPoz - I) NProbel = Val (Mid$ (Filedata, NPoz +1, 1);

Fiiedatal = Filedatal + String$(NProbel, “ I .= NPoz + 2 Loop

Filedatal = Filedatal + Mid$(Filedata, I) Write #6, Filedatal Loop

Close #5 Close ft6 End Sub

Private Sub Command3_Click() Dim Filedata As String Close #5

Text2.Text = “”

Open “Filel” For Input As ft5 Do While Not EOF(5)

Line Input #5, Filedata

Text2.Text = Text2.Text + Filedata :hr$ (13) + Chr$(10)

Loop End Sub

‘Private Sub Command4 Click() Dim Filedata As String Open “File2” For Input As #6 Do While Not EOF(6) Line Input tt6, Filedata

Textl.Text = Textl.Text + Filedata + Chr$(13) ^ Chr$(10)

Loop Close #6 End Sub

Private Sub Command5_Click()

Kill “Filel”

Kill “File2”

End End Sub

Private Sub Text3_KeyPress(keyAscii As Integer) Dim Filedata As String If keyAscii = 13 Then Filedata = Text3.Text

Write tt5, Filedata Text3.Text •= “”

Описание используемых стандартных (функции для обработки строк

Stiing$(niimbei, chaiactci) возвращает проку одинаковых символов (chaiaciei) заданной длины (niimbel)

Mid$(stung, start|. length|) возвращает строку с заданным количеством символов (length) из cirokh (stung), начиная с заданной позиции (start) el in start больше количесгва символов в строке - возвращаечся прока нулевой длины Если отсутствуег параметр length, то воз праща клея симво1ы от заданной позиции до конца строки Если slung равно Null - возвращается Null

lnSti(|stait. |stiingl. stiing2) возвращает первую позицию, с которой одна строка (stiing2) вхолиг в другую (stimgl), как подстрока Start — арифмешческое выражение, значение которого задае! начальную позицию поиска в slungi (если параметр stait не задан, ю поиск иде1 с первой позиции)

Возвращаемое значение' если stiingi имеет нулевую длину — О если string! равно Null - Null если stiing2 имеет нулевую длину — start если stiing2 равно Null — Null если string2 не найдено — О если start > длины stimgl — О


Информация о работе «Програмирование на Visual Basic»
Раздел: Кибернетика
Количество знаков с пробелами: 282295
Количество таблиц: 41
Количество изображений: 133

Похожие работы

Скачать
61591
9
0

... соответствующее диалоговое окно для выбора таблиц из базы-источника, а затем диалоговое окно для выбора файла назначения. ·     Выберите соответствующие спецификации и выполните экспортирование. ·     Microsoft Access выдаст сообщение о результате экспортирования.   Запросы. Запрос можно представить себе как точку зрения на данные, включенные в таблицу. Запросы служат для селекции и ...

Скачать
62384
1
0

... мастера на основе одной или нескольких таблиц или запросов. Мастер задает подробные вопросы об источниках записей, полях, макете, требуемых форматах и создает отчет на основании полученных ответов. 1.        В окне базы данных выберите Отчеты и нажмите кнопку Создать. 2.        В диалоговом окне Новый отчет выберите нужного мастера. 3.        Выберите таблицу или запрос, содержащие данные, на ...

Скачать
23613
0
1

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

Скачать
257002
0
22

... быть выведены на печать. На экране рисунки могут быть статическими (неподвижными) или динамическими (движущимися). В последнее время машинная графика выделилась в самостоятельный раздел информатики с многочисленными приложениями. Средствами машинной графики создается не только печатная продукция, но и рекламные ролики на телевидении, мультфильмы. Объясним, как кодируется изображение в памяти ...

0 комментариев


Наверх