Противоречивые операторы FIELD в QB64 - PullRequest
1 голос
/ 08 мая 2019

При запуске этого кода кажется, что testfile.000 содержит «00», а testfile.001 содержит «99», так почему же между этими файлами нет конфликта ?? Должно ли оно выбрасывать «дублирующее определение»?

file1$ = "testfile.000"
file2$ = "testfile.001"
OPEN file1$ FOR RANDOM AS #1 LEN = 2
FIELD #1, 2 AS x$
OPEN file2$ FOR RANDOM AS #2 LEN = 2
FIELD #2, 2 AS x$
LSET x$ = "99"
PUT 1, 1
PUT 2, 1
END

1 Ответ

1 голос
/ 04 июня 2019

В вашем коде второе объявление FIELD заменяет первое объявление FIELD. В BASIC переменные, объявленные в операторе FIELD, должны отличаться.

Если вы воспользуетесь приведенным ниже кодом, вы увидите интересный результат:

Файл testfile.000 будет содержать 1212 (только первое LSET задает поле x $ файла # 1)

Файл testfile.001 будет содержать 1488 (оба LSET устанавливают поле x $ файла # 2).

file1$ = "testfile.000"
file2$ = "testfile.001"
OPEN file1$ FOR RANDOM AS #1 LEN = 2
FIELD #1, 2 AS x$
LSET x$ = "12"

OPEN file2$ FOR RANDOM AS #2 LEN = 2
FIELD #2, 2 AS x$
LSET x$ = "14"

PUT #1, 1: REM This puts 12 into the 1st file#1 record.
PUT #2, 1

LSET x$ = "88"
PUT #1, 2: REM this puts 12 into the 2nd file#1 record
PUT #2, 2

CLOSE #1
CLOSE #2
END

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

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

file1$ = "testfile.000"
file2$ = "testfile.001"
OPEN file1$ FOR BINARY AS #1
OPEN file2$ FOR BINARY AS #2

x$ = "29"
PUT #1, 1, x$
PUT #2, 1, x$

CLOSE #1
CLOSE #2
END
...