|
Вопрос # 4 946/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Подскажите, как реализовать следующее.
Есть каталог с расположенными в нем текстовыми файлами.
Наименование файлов:
1501000.txt
1508000.txt
1518000.txt
1545000.txt
1567000.txt
Как по очереди обработать каждый файл найдя его по первым 4
символам имени файла,
т.е. если файл начинается с 1501, то выполнить Procedure 1
если файл начинается с 1508, то сделать Procedure 2
и т.д.
С уважением
Al_Sha
 |
Вопрос задал: Al_Sha (статус: Посетитель)
Вопрос отправлен: 22 января 2011, 20:16
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Al_Sha!
Где то так
var
searchResult : TSearchRec;
k:integer;
begin
// Пытаемся найти правильные файлы, соответствующие *.txt в текущем каталоге
if FindFirst('*.txt', faAnyFile, searchResult) = 0 then
begin
repeat
//ShowMessage(Имя файла = '+searchResult.Name);
k := strtointdef(copy(searchResult.Name, 1,4), -1);
case k of
-1: procZ(searchResult.Name);
1500: proc1(searchResult.Name);
1501: proc2(searchResult.Name);
1502: proc3(searchResult.Name);
else
procx(searchResult.Name);
end;
until FindNext(searchResult) <> 0;
// Должен освободить ресурсы, используемые этими успешными, поисками
FindClose(searchResult);
end;
end;
procedure proc1(fn:string);
begin
end;
procx - это процедура для обработки файлов, которые не попали в список "избранных".
procZ - это процедура для обработки файлов, которые имеют имя, первые 4 символа которого не являются цифрами.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 января 2011, 20:47
Оценка за ответ: 5
Комментарий к оценке: Спасибо большое...
То, что нужно
|
Ответ #2. Отвечает эксперт: DNK
Здравствуйте, Al_Sha!
Вариант №2.
procedure Proc0(FileName: string);
begin
...
end;
...
procedure Proc99(FileName: string);
begin
...
end;
type
TProc = procedure(FileName: string);
const
// Для файла с нужным номером указывается нужная процедура
PROC_ARRAY: array [0..99] of TProc =
(Proc0, Proc1, Proc2, Proc3, Proc4, Proc5, Proc6, Proc7, Proc8, Proc9,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0, Proc0,
Proc90, Proc91, Proc92, Proc93, Proc94, Proc95, Proc96, Proc97, Proc98, Proc99);
begin
for i := Low(PROC_ARRAY) to High(PROC_ARRAY) do begin
name := format('15%-.2d000.txt', [i]);
if FileExists(name) then
PROC_ARRAY[i](name);
end;
end;
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 22 января 2011, 21:24
Оценка за ответ: 5
Комментарий к оценке: Благодарю...
Немного непонятно с форматами NAME, надо разобраться.
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 22 января 2011, 22:28; участников в обсуждении: 3.
|
DNK (статус: Студент), 22 января 2011, 21:34 [#1]:
Эта функция модуля SysUtils.
function Format(const Format: string; const Args: array of const): string; overload;
"Digital Networked Knight"
|
|
Al_Sha (статус: Посетитель), 22 января 2011, 21:41 [#2]:
Спасибо большое, но непонятно это
'15%-.2d000.txt'
Как это...
|
|
DNK (статус: Студент), 22 января 2011, 21:50 [#3]:
Как расшифровывются форматирующие выражения подробно расписывается в справке к Delphi. В данном случае вместо %-.2d будет вставлено указанное в массиве число, при этом оно будет занимать два символа, выравнивание произойдет по правому краю, а недостающие символы заменяются нулями.
"Digital Networked Knight"
|
|
Al_Sha (статус: Посетитель), 22 января 2011, 21:56 [#4]:
Спасибо,понял....
|
|
Вадим К (статус: Академик), 22 января 2011, 22:22 [#5]:
Алгоритм DNK немного своеобразен. представим, что в папке находиться всего то 10 файлов, а перебирать будем сотню. Но где гарантия, что в завтра кол-во файлов для перебора не увеличится заметно.
Но создавать сотню процедур... это конечно сильно. В моем варианте процедур может быть заметно меньше, и заметно легче модернизируется.
В целом, как академическое решение - оно то интересное. Но как практическое - ужасное.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
DNK (статус: Студент), 22 января 2011, 22:28 [#6]:
Вадим К: Цитата:
Но создавать сотню процедур... это конечно сильно. В моем варианте процедур может быть заметно меньше, и заметно легче модернизируется. Создавать сотню процедур вовсе не обязательно. Для разных файлов можно указать одну процедуру.
"Digital Networked Knight"
|
22 января 2011, 22:48: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Судя по оценкам и комментариям, решено.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|