ФАЙЛИ ПРЯМОГО ДОСТУПУ У Бейсік MICROSOFT

Хоча в цих файлах інформація зберігається в двійковому вигляді, все обміни даними між програмою і файлом відбуваються у формі рядків символів Для полегшення перетворення числових значень в рядки символів і назад передбачений набір спеціальних функцій

Для оголошення прямого доступу до файлу в операторі OPEN в якості першого параметра,

визначає вид доступу (див підрозд 848), вказується R Наприклад, оператор

10   OPEN &quotR&quot, #2, &quotDAFL&quot, 20

відкриє для прямого доступу файл DAFL з довжиною запису 20 байт (за замовчуванням 128) і привяже до нього логічний номер 2

Додаткова складність роботи з файлами прямого доступу полягає в тому, що програма повинна явним чином маніпулювати даними з буфера, виділяється системою для кожного файлу Додаткові дії повязані з необхідністю переміщення інформації між буфером і програмою і між буфером і файлом Схема таких обмінів зображена на рис 88

Оператор OPEN визначає довжину запису (четвертий параметр), а оператор FIELD визначає буфер для файлу Довжина буфера не повинна перевищувати довжину запису всі ці довжини обчислюються в байтах Крім того, оператор FIELD визначає рядкові змінні з довільно вибираними іменами і асоціює їх з окремими частинами буфера Ці змінні можуть бути звичайним чином використані в операторах PRINT, строкових функціях і т д, але безпосереднє присвоювання значень цим змінним не допускається Інакше кажучи, вони не можуть бути зазначені в операторі INPUT і в лівій частині оператора присвоювання LET Єдиним способом занесення інформації в ці змінні є застосування операторів LSET і RSET (див рис 88) Визначення буфера допомогою FIELD має вигляд

Програма на мові Бейсік Рис 88 Робота з файлами прямого доступу в Бейсике Microsoft FIELD логічний номер файлу, довжина поля AS строкова змінна, .

де останній параметр повторюється стільки разів, скільки буде потрібно, наприклад:

10   FIELD #1,20 AS Z$,10 AS NAME$

Наведений вище оператор визначає буфер для файлу з логічним номером 1, що містить 30 байт, з яких перші 20 виділяються для рядка Z $, а наступні 10 – для рядка NAME $ Для читання інформації з такого файлу насамперед треба вважати необхідний запис в буфер, а потім використовувати відповідну змінну в програмі Наприклад, оператор

50   GET #1,209

вважає запис з номером 209 з файлу з логічним номером 1 і помістить її в буфер, а оператори

60 PRINT ПРІЗВИЩЕ:; NAMES 70 PRINT ПОДРОБИЦІ:; Z $

Iіспользуют значення буферних змінних, визначених оператором

FIELD

Для запису даних у розглянутий вище файл інформація повинна бути поміщена в буферні рядкові змінні, після чого буфер повинен бути переписаний в необхідну запис файлу Єдиним засобом приміщення формації в буферні змінні є оператори LSET і RSET, наприклад

75  LSETZ$=&quot99-641&quot + &quotBSI644&quot 80   RSET NAME$ =B$

Обидва оператора виконують одні й ті ж дії, тільки LSET вирівнює по лівому, a RSET – по правому краю поля Якщо при цьому все поле виявилося заповненим, то відсутні позиції заповнюються пробілами якщо ж даних в надлишку, то зайві символи ігноруються Як тільки дані потрапили в буфер, його треба переписати в необхідну запис файлу, наприклад:

90   PUT #1,304

Один оператор PUT або один оператор GET оперує цілим буфером

Наведемо перелік операторів, використовуваних для роботи з файлом прямого доступу: OPEN R, # 1, (відкрити файл, вказати довжину запису)

FIELD # 1, (визначити буфер)

LSET або RSET (можна повторювати багато разів для запису даних

PUT # 1, в файл)

GET # 1, (можна повторювати багато разів для зчитування даних з файлу) CLOSE 1 (припиняє звязок між логічним номером і

файлом)

Файлова функція LOC (N) повертає номер запису, використаний в PUT або GET, збільшений на 1, що корисно при роботі з файлом у послідовному режимі

Числа можна перетворити в рядки і отримувати з рядків за допомогою двох Функцій STR $ (X) і VAL (A $), що обговорювалися в гл 4 Однак для більш швидкого перетворення чисел в рядки символів можна користуватися наступними спеціальними функціями:

MKI $ (I%) для цілих значень, дає рядок з двох байтів

MKS $ (X) для речових значень, дає рядок з чотирьох байтів

MKD $ (A #) для речових значень з подвійною точністю, дає рядок з восьми байтів

Зворотні дії виконуються функціями CVI (A $), CVS (A $) HCVD (A $) Наведена нижче програма ілюструє застосування файлів прямого доступу в системі обліку товарів Вона спрощена в цілях демонстрації істотних моментів при маніпулюванні файлами Нехай у крамаря на складі близько 100 різних товарів, які треба реєструвати за такою формою:

артикул, найменування, кількість на складі, ціна за штуку

Для простоти передбачається, що крамар ввів свою систему артикулів у вигляді номерів від 1 до 100, що дозволяє використовувати артикул як номер запису у файлі, в яку поміщена інша відноситься до нього інформація

Для ведення цієї інвентаризаційної відомості потрібна система, що дозволяє отримувати довідки і вносити зміни Для її розробки неважко застосувати структограмми Нижче показано три діаграми для заключного етапу розробки: одна для основної програми і по одній для двох підпрограм:

Основна програма

Підпрограма отримання довідки Запросити артикул

ВВЕДЕННЯ відповіді в РС%

Вважати з файлу запис з номером РС%

ДРУК містяться в запису даних і ПОВЕРНЕННЯ

Підпрограма модифікації даних

Закінчена програма має наступний вигляд:

10 REM ПРИКЛАД МОДИФІКАЦІЇ ІНВЕНТАРИЗАЦІЙНОЇ ВІДОМОСТІ

20 OPEN &quotFT , #1,&quotSTOCK&quot,26

30 FIELD#120 AS DES

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*