Не могу прочитать сохраненный файл в Паскале 1.9.2 - PullRequest
0 голосов
/ 09 марта 2019
PROGRAM archivosejercic1o;
TYPE
    num = file of integer;
VAR
    arch_num: num;
    name: string[20];
    x: integer;
BEGIN
    writeln('Type the name of the file without extension:');
    readln(name);
    name:=name+'.txt';
    Assign (arch_num,name);
    Rewrite(arch_num);
    writeln('Type in a number to add to the file:');
    readln(x);
    WHILE (x <> 0) DO BEGIN
        write(arch_num,x);
        writeln('Type in another number to add to the file:');
        readln(x);
    END;
    close(arch_num);
END.

У меня есть этот код, который создает файл с серией чисел, которые пользователь предоставляет, после компиляции и выполнения файл появляется в каталоге Pascal, но когда я его открываю, я получаю что-то вроде этого:

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

1 Ответ

2 голосов
/ 09 марта 2019

Двоичные и текстовые

Вы открываете file of Integer.Это означает, что вы записываете целые числа в файл, то есть файл имеет формат двоичный .

Но вы называете его name + '.txt', что подсказывает мне, что вы хотите написать текст , а не двоичные значения, в файл.

Теперь, если вы отображаете его как текст, но это не текст, вы не получаете то, что хотите.

Двоичный означает, что вы, например, пишете 4-байтовое целое число, например 12345 (или шестнадцатеричное $3039), в качестве этих 4 байтов, то есть байтов $39, $30, $00 и $00, в этом порядке (или в обратном порядке, в зависимости от порядкового номера вашего компьютера).

Двоичный файл компактен, но редко читается человеком.Если вы отображаете такой бинарный файл как text , вы можете получить странный вывод или, возможно, вообще ничего (просто попробуйте открыть файл .exe в текстовом редакторе и посмотрите, чтоты получаешь).Вы, вероятно, хотите написать цифры в виде текста.Или вы используете что-то вроде шестнадцатеричного редактора для их просмотра (если вы умеете читать в шестнадцатеричном формате).

Так что откройте ваши файлы как text:

PROGRAM archivosejercic1o;
TYPE
    num = text;
VAR
    arch_num: num;
    name: string[20];
    x: integer;
BEGIN
  ...
    writeln(arch_num, x);
  ...
END.

Подробнее о двоичный против текст : https://fileinfo.com/help/binary_vs_text_files. Обратите внимание, что это еще не объясняет различные версии текста Unicode.

...