Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Файлы с произвольным доступом




Этот тип файлов состоит из записей, доступ к которым возможен в любой последовательности. Места под данные эти файлы занимают меньше, т.к. хранимые на диске данные не преобразуются в коды ASCII.

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

Мы имеем четыре специальные функции для решения этой проблемы:

CVMS и CVMD для преобразования числовых полей формата MICROSOFT в числа с одинарной и двойной точностью, и MKMS$ и MKMD$ для превращения значений одинарной и двойной точности в цепочки формата MICROSOFT.

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

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

 

При работе с файлами произвольного доступа необходимо следовать правилам:

1. Открыть файл и определить длину каждой записи:

 

OPEN filespec AS [#] filenum LEN = record.size

 

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

2. Выполнить оператор FIELD для определения размеров полей записи:

 

FIELD filenum,width AS string-var [width AS string-var]...

 

По результатам работы оператора FIELD формируется буфер обмена между диском и ОЗУ.

3. Перед записью данных на диск заполните буфер обмена с помощью операторов LSET и RSET. Числа перед этой операцией должны преобразовываться в цепочки с помощью соответствующих функций. После заполнения полей записи используйте оператор PUT для записи данных на диск.

4. Для считывания данных из файла в буфер используйте оператор GET. При выборке данных из буфера преобразуйте числовые данные из цепочной формы.

5. По окончании работы закройте файл (CLOSE).

 

Сведем операторы и функции Turbo-Basic, управляющие файлами произвольного доступа в таблицу:

 

 

Оператор/функция Операция

 

 

CLOSE Оканчивает операции на файле(ах)

CVI,CVL,CVS,CVD Преобразует цепочку знаков в соответствующий числовой тип

FIELD Определяет размеры полей записи

GET Считывает запись

LOC Определяет номер последней считанной записи

LSET,RSET Подготовка поля для записи

MKI$,MKL$,MKS$, Преобразует соответствующие числовые типы в строки

MKD$

MKMS$,MKMD$, Функции трансляции формата MICROSOFT

CVMS,CVMD

OPEN Открывает файл для чтения/записи

PUT Записывает запись

____________________________________________________________________________________

 

 

CVI, CVL, CVS, CVD -функции Преобразуют считанные с файлов произвольного доступа строковые данные в числовую форму.

 

Синтаксис: y%=CVI(2-byte string)

y&=CVL(4-byte string)

y!=CVS(4-byte string)

y#=CVD(8-byte string)

 

Комментарии: CVI преобразует 2-байтовую цепочку в целое число.

CVL преобразует 4-байтовую цепочку в расширенное целое число.

CVS преобразует 4-байтовую цепочку в значение с одинарной точностью.

CVD преобразует 8-байтовую цепочку в значение с удвоенной точностью.

 

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

 

Синтаксис: FIELD [ #] filenum, width AS string var [width AS string var]...

 

Комментарии: filenum - номер, под которым был открыт файл

width(ширина) - число байт, отводимое в буфере под переменную поля.

string var - сама переменная поля.

 

FIELD определяет соответствие между строковыми значениями и входным-выходным буфером файла с произвольной выборкой. Использованные в этом операторе строки могут теперь записываться в буфер файла с помощью RSET и LSET.

 

GET считывает запись с файла произвольной выборки.

 

Синтаксис: GET [ #] filenum [, [recnum], [ var]]

 

Комментарии: filenum - номер, под которым был открыт файл

recnum - номер записи, которую надо считать (от 1 до 16777215). Если recnum опущен, то используется следующий за GET или PUT номер записи.

var - переменная, получающая данные из файла. Если указана переменная, то CVD, CVL, CVI, CVS не требуются для преобразования полей записи в числа.

 

LOC -функция возвращает текущую позицию файла.

 

Стнтаксис: y=LOC(filenum)

 

Комментарии: filenum - номер файла.

 

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

 

LSET помещает строковые данные в буфер файла прямого доступа.

 

Синтаксис: LSET field variable=strind expression

 

Комментарии: field variable - переменная поля

strind expression - строковое выражение

 

LSET и родственный ему оператор RSET пересылают строковую информацию в поле переменных, принадлежащее буферу файла прямого доступа. Если длинна строкового выражения меньше переменной поля, определяемой оператором FIELD,LSET выравнивает это поле по левому краю, дополняя его пробелами, а оператор RSET выравнивает по правому краю, дополняя его пробелами (пробелы добавляются перед первым знаком строкового выражения). Кроме того, LSET и RSET можно использовать для форматирования выходных данных на экран или печать:

 

a$=space$(20)

RSET a$="Rigth-just"

PRINT a$

 

RSET Перемещает строчные данные в буфер произвольного файла.

 

Синтаксис: RSET field variable=strind expression

 

Комментарии: field variable - переменная поля

strind expression - строковое выражение

 

RSET и LSET перемещают строчные данные в "переменные поля", которые уже определены в предыдущем заявлении FIELD, как принадлежащие буферу произвольного файла. Если длина строчного выражения меньше размеров переменной поля, специфицируемой в заявлении FIELD, это поле выравнивается заявлением RSET вправо посредством заполнения пробелами. Это означает, что пробелы вставляются перед первой литерой строчного выражения таким образом, что после операции RSET параметр LEN (переменной поля) остается равным ширине, определенной в соответствующим заявлении FIELD. LSET осуществляет левое выравнивание заполнением пробелами (пробелы добавляются после последней литеры строчного выражения). RSET можно также использовать для образования формата вывода на экран или печатающее устройство:

 

a$ = space$(20)

RSET a$ = "Выравнять вправо"

PRINT a$

 

MKI$,MKL$,MKS$,MKD$- функции Преобразуют числовые данные в строки (для ввода в файл прямого доступа).

 

Синтаксис: s$=MKI$(целочисленное выражение)

s$=MKL$(длинное целочисленное выражение)

s$=MKS$(выражение с одинарной точностью)

s$=MKS$(выражение с двойной точностью)

 

Эти функции являются частью процесса получения численных значений в файлах с произвольной выборкой. Поскольку операторы, записывающие информацию в буфер файла с произвольной выборкой (LSET,RSET), управляют только строками, численные данные следует преобразовать в строковые до пересылки (PUT) в файл. MKI$ возвращает строку из 2 символов,состоящую из 28-битовых значений, которые Turbo-Basic использует для внутреннего представления целочисленных переменных. MKL$ возвращает 4-байтовый строковый эквивалент длинного целого числа. MKS$ возвращает 4-байтовый строковый эквивалент значения с одинарной точностью. MKD$ возвращает 8-байтовый строковый эквивалент значения с двойной точностью. Дополняющие функции CVI,CVL,CVS,CVD предназначены для использования в процессе считывания содержимого файла с произвольной выборкой.

 

MKMD$,MKMS$ -функции Преобразуют численные данные в строки в формате Microsoft (для ввода файла прямого доступа).

 

Синтаксис: s$=MKMS$(выражение с одинарной точностью)

s$=MKMD$(выражение с двойной точностью)

 

Эти функции предусмотрены только для совместимости с существующими файлами с произвольной выборкой,в которых содержатся числа с плавающей запятой в Microsoft-формате. MKMS$ формирует 4-байтовую строку с одинарной точностью; MKMD$ формирует 8-байтовую строку с двойной точностью.

 

CVMD, CVMS -функции Преобразуют строковые значения, считанные с MICROSOFT-форматных файлов с произвольной выборкой в числовую форму.

 

Синтаксис: y!=CVMS(4-byte string)

y#=CVMD(8-byte string)

 

CVMD/CVMS преобразует строковую цепочку, представляющую значение одинарной/двойной точности в формате MICROSOFT в значение одинарной/удвоенной точностью в формате IEEE. Обеспечивают совместимость числовых данных в файлах спроизвольным доступом Basic и Turbo-Basic.

 

PUT вводит запись в файл прямого доступа.

 

Синтаксис: PUT [#]filenum[,record number]

 

Коментарии: filenum - значение, определяемое при открытом файле.

record namber - численное выражение, описывающее запись, которую следует записать. Это выражение может находится в пределах от 1 до 16.777.216.

PUT - дополнение к GET. оно осуществляет одну запись в файл с произвольной выборкой. "record number" - не обязателен. Если оно опущено, Turbo Basic использует значение из последнего оператора PUT или GET плюс 1.

 

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

 

OPEN "ADD.DTA" AS #1 LEN=81

FIELD #1,25 AS name$,25 AS addres$,15 AS city$,2 AS state$,_

4 AS zip$,2 AS class$,8 AS contrib$

INPUT "Which record do you want to see: ",recnumber

GET #1, recnumber

PRINT "Data for record"recnumber

PRINT "Name: "name$

PRINT "Addres: "addres$

PRINT "City/State/Zip: "city$,state$,CVL(zip$)

PRINT "Class: "CVI(class$)

PRINT "Most recent contrib: "SVL(contrib$)

 

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

 

zip$=a$

 

переменная zip$ больше не относится к буферу обмена.

 




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 861; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.049 сек.