![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
нумерация [D7, Win95/98, Win2k, WinXP]
rosl © (2005-06-15 01:47:00)Уважаемые МАСТЕРА. Я задавал недавно этот вопрос, мне ответили, но я так и не решил свою проблему.
Создаю файлы, в имеин которых стоит номер документа. Формирую их по порядку например первый ___1.txt, второй ___2.txt, но если файлов больше 9 то вместо цифр, должны идти буквы - ___а.txt, ___b.txt. С цифрами понятно, а как сделать чтоб при формировании очередного файла в названии была следующая буква латинского алфавита?
ответ был таков:
S:='123...89abcd...yz';
FileName:=FileNameTemplate+S[FileIndex];
s - string?
FileNameTemplate - тоже не могу понять
rosl (2005-06-15 05:34:00) [1]спасибо
Просто Джо (2005-06-15 04:12:00) [2]Вот тебе объектно-ориентированный подход :)
-----------------------
Модуль NameTempl.pas:
-----------------------
unit NameTempl;
interface
uses SysUtils;
type
TFileNameTemplate = class
private
FBuffer,
FPrefix,
FPostfix,
FExtension: string;
FPointer: Integer;
FUpperCase: Boolean;
procedure CheckRangeError;
function CurrentChar: Char;
public
constructor Create (const APrefix,APostfix,AExtension: string;
AUpperCase: Boolean = False);
function GetName: string;
procedure Reset;
end;
var
FileNameTemplate: TFileNameTemplate;
implementation
{ TFileNameTemplate }
procedure TFileNameTemplate.CheckRangeError;
begin
if FPointer > Length(FBuffer) then
raise ERangeError.Create('Range error');
end;
constructor TFileNameTemplate.Create(const APrefix, APostfix,
AExtension: string; AUpperCase: Boolean);
begin
FBuffer := '0123456789abcdefghijklmnopqrstuvwxyz';
FPrefix := APrefix;
FPostfix := APostfix;
FExtension := AExtension;
FUpperCase := AUpperCase;
Reset;
end;
function TFileNameTemplate.CurrentChar: Char;
begin
CheckRangeError;
Result := FBuffer[FPointer];
end;
function TFileNameTemplate.GetName: string;
begin
Result := '';
Result := Format(
'%s%s%s.%s',
[FPrefix,CurrentChar,FPostfix,FExtension]
);
if FUpperCase then
Result := SysUtils.UpperCase(Result);
Inc (FPointer);
end;
procedure TFileNameTemplate.Reset;
begin
FPointer := 1
end;
initialization
FileNameTemplate := TFileNameTemplate.Create('~~','__','txt',True);
finalization
FileNameTemplate.Free;
end.
Подключаешь его к проекту (Project/Add to Project...). Добавлюяешь в uses того модуля, в котором будешь его использовать и... все :)
-------------------
Тестовый пример:
-------------------
Кладешь на формуMemoиButton. В обработчикеOnClickButton'а пишешь:
Memo1.Lines.Add(FileNameTemplate.GetName);
Запускаешь программу и клацаешь по кнопке несколько раз.
-------------------
Объяснение
-------------------
В модуле объявлена глобальная переменнаяFileNameTemplate. При старте приложения экземпляр объектаTFileNameTemplateавтоматически создается и ссылка на объект сохраняется в глобальной переменной FileNameTemplate. При завершении приложения объект автоматически уничтожается.
Каждое новое обращение к методуGetNameвозвращает новое имя файла. После того, как дошли до 'z' каждый новый вызов методаGetNameбудет генерировать исключениеERangeErrorс соответствующим сообщением об ошибке. Вызов методаReset-- обнуляет счетчик и позволяет начать последовательность заново.
Так-с. Рассмотрим конструктор класса:
constructor Create (const APrefix,APostfix,AExtension: string;
AUpperCase: Boolean = False);
При создании экземпляра нашего класса можно указать следующие параметры:
APrefix- строка символов, идущая ДО символа счетчика;
APostfix- строка символов, идущая ПОСЛЕ символа счетчика;
AExtension- расширение имени файла. Точку указывать НЕ нужно.
AUpperCase- логическое значение, указывающее на то, нужно или нет генерировать имя файла в ВЕРХНЕМ регистре. Если его не указывать, будет использовано значение по умолчанию ЛОЖЬ. Т.е, имя файла - в нижнем регистре.
Все эти параметры исправь в вызове конструктора в секции initialization модуля NameTempl на те значения, которые тебе нужны.
Удачи, пользуйся.
П.С. Вот как люди борются с бессоницей ;-)
rosl (2005-06-15 03:03:00) [3]вот и я так же
мне бы разобраться с массивом (я в этом не силён)
нашёл кое-какие примеры. но может подкините свой именно по моему вопросу
Германн (2005-06-15 02:20:00) [4]s - string. Это точно!
FileNameTemplate - функция, которая возвращает " неизменную часть имени файла" или константа, которая представляет собой " неизменную часть имени файла".
Но по сути сабжа стоит еще и подумать о соответствии "Имени файла" и FileName!
Увы, не читал исходный сабж. Посему мог ответить невпопад. :(