Цитата:
Сообщение от SCrat.ORS
сложно, потому что это отдельные части кода, моей одной программки, ...
|
Что-то я не увидел связи между тем "почему так сложно" и тем что это "части кода твоей программки". Или ты намекаешь на то, что тебе платят пропорционально количеству строк в твоей программе и поэтому где только можно ты пытаешься увеличить их количество?
Цитата:
Сообщение от SCrat.ORS
в 1 части, да,.. возможно и можно проще, но не во второй
|
Что значит "но не во второй"? Мой второй код тоже проще и короче твоего. У меня законченный и рабочий код, а твой до конца не дописан: нет завершения цикла while, нет освобождения ресурса FindClose(SR). Кроме того дважды используется FindNext (и нужен ещё третий), хотя достаточно одного, и ещё дважды используется Continue (которое имеет свойство ухудшать читабельность кода, правда не настолько сильно как goto, но всё же). И напоследок ошибки: переменная FindRes у тебя почему-то строкового типа - это ошибка, такое не скомпилируется; и у тебя в программе ошибочно предполагается, что расширение файла всегда трёхсимвольное и всегда маленькими буквами.
Если дописать твою версию до рабочего варианта, получим следующее:
Код:
procedure FindFile(Dir: string);
var
SR: TSearchRec;
exten, Name: string;
FindRes, k: Integer;
begin
FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
if FindRes = 0 then
try
while FindRes = 0 do
begin
Name := Dir;
if ((SR.Attr and faDirectory) = faDirectory) and ((SR.Name = '.') or (SR.Name = '..')) then
begin
FindRes := FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory) = faDirectory) then /// если найден каталог, то
begin
FindFile(Dir + SR.Name + '\');
FindRes := FindNext(SR);
Continue;
end;
Name := Name + SR.Name;
k := length(SR.Name);
exten := copy(SR.Name, k - 2, 3);
if exten = 'txt' then
begin
end;
FindRes := FindNext(SR);
end;
finally
FindClose(SR);
end;
end;
Теперь сравни с моей версией:
Код:
procedure FindFile(Path: string);
var
SR: TSearchRec;
FullFileName, FileExt: string;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = NO_ERROR then
try
repeat
FullFileName := Path + sr.Name;
if (SR.Attr and faDirectory) = faDirectory then // Это каталог
begin
if (SR.Name <> '.') and (SR.Name <> '..') then FindFile(FullFileName + '\');
end else // Это файл
begin
FileExt := AnsiLowerCase(ExtractFileExt(FullFileName));
if FileExt = '.txt' then
begin
end;
end;
until FindNext(SR) <> NO_ERROR;
finally
FindClose(sr);
end;
end;