Почему BASIC добавляет 0x1a в конец файла? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь передать файлы на старый PCjr через последовательный кабель нуль-модема.Я сделал быстрый базовый скрипт для чтения данных с последовательного порта и записи их в файл, но обнаружил, что каждый сохраняемый файл имеет дополнительный байт 0x1a в конце.

Кажется, чтобыть вызвано оператором CLOSE, так как даже OPEN ing и CLOSE ing файла без записи ничего приводят к однобайтовому файлу.

Мне не нужен символ SUB в концемоих файлов, особенно двоичных!Есть ли альтернативный способ записи файлов, который предотвращает такое поведение?

(Использование превосходного "PC-BASIC" в виртуальной машине Lubuntu для демонстрации, но это, кажется, "вещь"во всех вариантах бейсика)

josh2112@jf334-lubuntu-vm:~$ pcbasic -b
PC-BASIC 2.0.0                                                                  
(C) Copyright 2013--2018 Rob Hagemans.                                          
60300 Bytes free                                                                
Ok                                                                              
OPEN "O",#1,"TEST.TXT":PRINT#1,"hello world";:CLOSE:SYSTEM                      
josh2112@jf334-lubuntu-vm:~$ xxd TEST.TXT 
00000000: 6865 6c6c 6f20 776f 726c 641a            hello world.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Функция для записи строки в файл вывода данных без конечного символа:

OPEN "B", #1, "TEST.TXT"
X$ = "hello world"
FOR X = 1 TO LEN(X$)
    Z$ = MID$(X$, X, 1)
    PUT #1, X, Z$
NEXT
0 голосов
/ 19 октября 2018

Может быть, это может помочь:

Пакетный скрипт для объединения файлов без шестнадцатеричного символа 1A в конце

В посте обсуждается, как DOS обрабатывает копирование данных с помощью индикатора EOFи как работают флаги.Не могли бы вы скопировать файлы с указанными переключателями?

РЕДАКТИРОВАТЬ по автору вопроса : Да, это так.Необходимая конкретная команда: copy src.bin /a dest.bin /b.Это удаляет байт EOF из конца файла.Это даже поддерживается в DOS 2.10!Раздражает, что я должен выполнить этот дополнительный шаг после использования моей программы BASIC для сохранения файла, но он выполняет свою работу.

...