Интерактивное графическое программное обеспечение PC-DMIS (Глава 25: Использование ввода/вывода файла), страница 5

<varname> / <имя переменной>

Это значение идентификатора переменной, принимающей значение, определяющее успех или неудачу операции чтения блока.

<fptrname> / <имя указателя файла>

Это имя, определенное для указателя файла при открытии файла.

<size> / <размер>

Это число считываемых символов.

Для открытия диалогового окна, ассоциированного с этой командой ввода/вывода:

1.  Откройте окно Edit.

2.  Установите курсор на команду Read Block.

3.  Нажмите F9.

Пример кода для Read Block

Предположим, у вас есть различные внешние файлы данных, которые содержат различные данные о деталях и первые несколько символов каждого файла указывают, для чего предназначен файл. Вы можете использовать команду File/Read_Block для того, чтобы считать только эти первые символы перед тем, как решить считать и обработать каждую строку. Ознакомьтесь с кодом:

C3=COMMENT/INPUT,Please type the name of the

,file code to search for.

ASSIGN/BLOCKSIZE = LEN(C3.INPUT)

ASSIGN/FILECODE = C3.INPUT

DO/

C1=COMMENT/INPUT,Please type the full pathway,

,filename, and extension to the

,file you want to process.

,Type [Q] to quit.

IF/C1.INPUT== "Q" OR C1.INPUT=="q"

COMMENT/OPER,You've chosen to quit. Program now ending.

GOTO/END

END_IF/

V1=FILE/EXISTS,C1.INPUT

IF/V1<>0

COMMENT/OPER,"Data file [" + C1.INPUT + "] exists. Click OK to continue."

FPTR=FILE/OPEN,C1.INPUT,READ

V2=FILE/READ_BLOCK,FPTR,BLOCKSIZE

FILE/CLOSE,FPTR

IF/V2<>FILECODE

COMMENT/OPER,"The file's code of [" + V2 + "] doesn't match"

,"the FILECODE of [" + FILECODE + "]."

END_IF/

UNTIL/V2==FILECODE

COMMENT/OPER,"File [" + C1.INPUT + "] is a match."

,"The file's code of [" + V2 + "] matches"

,"the FILECODE of [" + FILECODE + "]."

COMMENT/OPER,Program then processes the file.

END_IF/

ELSE/

COMMENT/OPER,"Data file [" + C1.INPUT + "] doesn't exist. Please retry using an existing data file."

GOTO/END

END_ELSE/

END=LABEL/

PROGRAM/END

Пояснение кода

Некоторые части этого кода похожи на части, описанные в "Примере кода для Read Character" или в "Примере кода для Read Line".

Здесь приводятся пояснения кода, встречающегося только в этом примере.

ASSIGN/BLOCKSIZE = LEN(C3.INPUT) Эта строка создает определяемую пользователем переменную под названием BLOCKSIZE, которая содержит целое число, равное числу символов, найденных в C3.INPUT. Это будет использовано в качестве размера блока считываемых символов.

ASSIGN/FILECODE = C3.INPUT Эта строка создает переменную FILECODE и дает ей значение C3.INPUT.

C1=COMMENT/INPUT Этот комментарий сохраняет полный путь, введенный пользователем в переменную C1.INPUT.

V1=FILE/EXISTS,C1.INPUT Эта строка проверяет существование файла, имя которого было определено в комментарии C1.

DO/ Эта строка начинает цикл DO / UNTIL. Он включает в себя код, который позволяет пользователю определить файл, из которого будет выполняться чтение. Выполнение цикла будет продолжаться до тех пор, пока текст, присвоенный переменной FILECODE, будет совпадать с текстом, считанным из файла.

V2=FILE/READ_BLOCK,FPTR,BLOCKSIZE Эта строка читает количество, символов, равное целому числу, содержащемуся в переменной BLOCKSIZE. Затем текст сохраняется в переменной V2.

IF/V2<>FILECODE Эта строка начинает блок кода IF / END IF, который тестирует совпадает ли текст в переменной V2 с текстом, сохраненным в переменной FILECODE. Если он совпадает, выполнение программы будет продолжено. В противном случае выводится сообщение о том, что два кода не совпадают.

UNTIL/V2==FILECODE Эта строка проверяет состояние цикла DO / UNTIL для проверки, совпадает ли текст в переменной V2 с текстом в переменной FILECODE. Если оператор возвращает значение "ложь" (false), цикл DO выполняется еще раз, позволяя пользователю выбрать другое имя файла. Если оператор возвращает значение "истина" (true), то происходит выход из цикла и программа отображает сообщение о том, что значения совпадают. PC-DMIS может продолжить чтение каждой строки данных из указанного файла данных.