Чтение из текстовых файлов : проблемы и тонкости

Хочу предложить небольшие усовершенствования программы P_31_1 из 31-ой главы редакции 12.4 от 2012-11-23.
В функции ReadFam цикл чтения символов фамилии организован посредством оператора цикла с предусловием:
Очевидно, программа должна корректно обрабатывать строки с нулевым количеством оценок. При обработке таких строк предложенный автором вариант "съедает" последние буквы фамилий учеников.
Предлагаю после цикла добавить строку:
Или вовсе заменить этот фрагмент кода на:
Как лучше - не знаю, рассудите.
Кроме того, строку:
В функции ReadFam цикл чтения символов фамилии организован посредством оператора цикла с предусловием:
- Код: Выделить всё
while not Eoln(InFile) and (Ord(sym)>32) do begin
S:= S+sym;
Read(InFile, sym);
end;
Очевидно, программа должна корректно обрабатывать строки с нулевым количеством оценок. При обработке таких строк предложенный автором вариант "съедает" последние буквы фамилий учеников.
Предлагаю после цикла добавить строку:
- Код: Выделить всё
while not Eoln(InFile) and (Ord(sym)>32) do begin
S:= S+sym;
Read(InFile, sym);
end;
if EoLn(InFile) then S:=S+sym;
Или вовсе заменить этот фрагмент кода на:
- Код: Выделить всё
repeat
S:=S+sym;
if EoLn(InFile) then break;
read(InFile, sym);
until Ord(sym)<=32;
Как лучше - не знаю, рассудите.
Кроме того, строку:
- Код: Выделить всё
Writeln(OutFile, 'Ученик не аттестован');
- Код: Выделить всё
Writeln(OutFile, Counter:3, Fam:18, 'Ученик не аттестован');