Своя своих не познаша
May. 1st, 2021 10:40 amПишем простую программу, которая что-то печатает в стандарный вывод (для контроля) и пишет то же самое во временный файл, а потом посимвольно читает из временного файла и пишет в стандарный вывод:
Налицо ужас и безумие, но ларчик открывается просто: в файле всё в порядке, и читается из него всё правильно, а к фиаско приводит всего лишь запись в стандартный вывод символа line feed (012). Если написать в 11-й строке
то всё работает идеально.
Примечание: восклицательный знак - это символ разыменования, вводимый как @ или ^
01.05.21 M1
PASCAL COMPILER 15.0 (15.02.82)
00001 1 1 PROGRAM MAIN(OUTPUT); VAR F:TEXT; I:INTEGER;
00014 2 2 BEGIN
00015 3 2 REWRITE(F);
00016 4 3 FOR I := 10 TO 30 DO BEGIN
00017 5 3 WRITELN( I, ’:’, ’ABCDEFGHIJ’ : I);
00026 6 3 WRITELN(F, I, ’:’, ’ABCDEFGHIJ’ : I);
00035 7 2 END;
00037 8 2 RESET(F);
00041 9 2 WRITELN(’--------------------’);
00044 10 3 WHILE NOT EOF(F) DO BEGIN
00045 11 3 WRITE(F!);
00050 12 3 GET(F)
00051 13 3 END
00064 14 0 END.
*EXECUTE
10:ABCDEFGHIJ
11: ABCDEFGHIJ
12: ABCDEFGHIJ
13: ABCDEFGHIJ
14: ABCDEFGHIJ
15: ABCDEFGHIJ
16: ABCDEFGHIJ
17: ABCDEFGHIJ
18: ABCDEFGHIJ
19: ABCDEFGHIJ
20: ABCDEFGHIJ
21: ABCDEFGHIJ
22: ABCDEFGHIJ
23: ABCDEFGHIJ
24: ABCDEFGHIJ
25: ABCDEFGHIJ
26: ABCDEFGHIJ
27: ABCDEFGHIJ
28: ABCDEFGHIJ
29: ABCDEFGHIJ
30: ABCDEFGHIJ
--------------------
10:ABCDEFGHIJ
15: ABCDEFGHIJ
ABCDEFGHIJ
ABCDEFGHIJ
CDEFGHIJ
HIJ
Налицо ужас и безумие, но ларчик открывается просто: в файле всё в порядке, и читается из него всё правильно, а к фиаско приводит всего лишь запись в стандартный вывод символа line feed (012). Если написать в 11-й строке
00045 11 3 IF F! = CHR(012B) THEN WRITELN ELSE WRITE(F!);
то всё работает идеально.
Примечание: восклицательный знак - это символ разыменования, вводимый как @ или ^
no subject
Date: 2021-05-01 10:03 pm (UTC)Для авторов Паскаля оно не очевидно было. :)
no subject
Date: 2021-05-02 09:30 am (UTC)