Страница 1 из 1

Глава 40. Задание Е.

СообщениеДобавлено: 02.07.2016 17:19:46
Fors
В этом задании если в документе на последней строке написано одно число и после него стоит пробел, то счетчик показывает неверное значение а именно на единицу больше.

Само задание и ответ.
И) Напишите функцию для подсчета количества номеров в полицейской БД при
условии, что одна строка может содержать несколько номеров, а некоторые строки (в т.ч.
в конце файла) могут быть пустыми.

function CalcNumbers(var aFile: text): integer;
var cnt,n: integer;
begin
cnt:=0;
while not Eof(aFile) do begin
{ Пропуск пустых строк }
while Eoln(aFile) do
if Eof(aFile) then Break else Readln(aFile);
if Eof(aFile) then Break;
Read(aFile, n);
Inc(cnt);
end;
CalcNumbers:= cnt;
end;

var F: Text;

begin
Assign(F, 'Test.txt'); Reset(F);
Writeln(CalcNumbers(F));
Close(F);
Readln;
end.

Re: Глава 40. Задание Е.

СообщениеДобавлено: 02.07.2016 17:51:11
Oleg_D
Да, есть такой грешок у стандартных функций Паскаля: не любят они концевых пробелов :(
И потому лучше применять две модернизированные функции SeekEoln (вместо Eoln) и SeekEof (вместо Eof). Они игнорируют концевые пробелы и пустые строки в конце, -- проверьте на этом примере.
Надо бы добавить это в книгу когда-нибудь.