Из группы файлов найти тот, в котором наибольшее количество строк - 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, выводится сообщение о завершении поиска и имя файла с количеством строк.
- Если ни один файл не удовлетворяет условиям, выводится соответствующее сообщение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д