Из группы файлов найти тот, в котором наибольшее количество строк - Free Pascal
Формулировка задачи:
Из группы файлов найти тот, в котором наибольшее кол-во строк. Очень хочу разобраться. Заранее спасибо
Решение задачи: «Из группы файлов найти тот, в котором наибольшее количество строк»
textual
Листинг программы
- uses dos;
- const
- path = 'd:\test\';
- function getSum(n : longint) : Integer;
- begin
- GetSum := 0;
- while n > 0 do
- begin
- Inc(GetSum, n mod 10);
- n := n div 10;
- end;
- end;
- var
- MaxLines : integer;
- MaxName : string;
- procedure CheckFile(fn : string);
- var
- t : text;
- s : string;
- value : longint;
- code, lines : integer;
- has_27 : boolean;
- begin
- {$i-}
- assign(t, fn);
- reset(t);
- {$i+}
- if ioresult <> 0 then
- begin
- writeln('Ошибка при открытии файла ', fn);
- exit;
- end;
- lines := 0; has_27 := false;
- while not eof(t) do
- begin
- readln(t, s); inc(lines);
- val(s, value, code);
- if code = 0 then { <--- Все в порядке, целое число }
- begin
- has_27 := has_27 or (GetSum(value) = 27);
- end;
- end;
- if (MaxLines < lines) and has_27 then
- begin
- MaxLines := lines;
- MaxName := fn;
- end;
- end;
- var
- Info : SearchRec;
- begin
- MaxLines := 0;
- MaxName := '';
- FindFirst(path + '*.txt', AnyFile, Info);
- while DosError = 0 do
- begin
- CheckFile(path + Info.name);
- FindNext(info)
- end;
- FindClose(Info);
- if MaxLines > 0 then
- Writeln ('Поиск окончен. ', MaxName, ' содержит ', MaxLines,' строк')
- else
- Writeln ('Либо нет txt-файлов, либо ни один из них не содержит числа с суммой цифр = 27');
- end.
Объяснение кода листинга программы
- Объявлены константы и переменные:
- path = 'd:\test\';
- MaxLines = 0;
- MaxName = '';
- функции getSum и CheckFile;
- переменные t, s, value, code, lines, has_27;
- переменная Info для работы с файлами.
- В функции getSum вычисляется сумма цифр числа.
- В процедуре CheckFile проверяется содержимое файла на наличие чисел с суммой цифр равной 27.
- Открывается файл с помощью функции assign.
- Если файл не удалось открыть, выводится сообщение об ошибке и процедура завершается.
- Считывается каждая строка файла до тех пор, пока не будет достигнут конец файла.
- Если строка содержит число, проверяется его сумма цифр с помощью функции getSum.
- Если сумма цифр равна 27, увеличивается счетчик линий и устанавливается флаг has_27.
- Если (MaxLines < lines) и has_27, то значения MaxLines и MaxName обновляются.
- В основной части программы открывается поиск файлов с помощью функции FindFirst.
- Поиск продолжается до тех пор, пока не будет достигнут конец списка файлов.
- Для каждого найденного файла вызывается процедура CheckFile.
- Если MaxLines больше 0, выводится сообщение о завершении поиска и имя файла с количеством строк.
- Если ни один файл не удовлетворяет условиям, выводится соответствующее сообщение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д