Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Внизнумерация Найти похожие ветки
← →
rosl (2005-06-15 01:47) [0]Уважаемые МАСТЕРА. Я задавал недавно этот вопрос, мне ответили, но я так и не решил свою проблему.
Создаю файлы, в имеин которых стоит номер документа. Формирую их по порядку например первый ___1.txt, второй ___2.txt, но если файлов больше 9 то вместо цифр, должны идти буквы - ___а.txt, ___b.txt. С цифрами понятно, а как сделать чтоб при формировании очередного файла в названии была следующая буква латинского алфавита?
ответ был таков:
S:="123...89abcd...yz";
FileName:=FileNameTemplate+S[FileIndex];
s - string?
FileNameTemplate - тоже не могу понять
← →
Германн © (2005-06-15 02:20) [1]s - string. Это точно!
FileNameTemplate - функция, которая возвращает "неизменную часть имени файла" или константа, которая представляет собой "неизменную часть имени файла".
Но по сути сабжа стоит еще и подумать о соответствии "Имени файла" и FileName!
Увы, не читал исходный сабж. Посему мог ответить невпопад. :(
← →
rosl (2005-06-15 03:03) [2]вот и я так же
мне бы разобраться с массивом (я в этом не силён)
нашёл кое-какие примеры. но может подкините свой именно по моему вопросу
← →
Просто Джо © (2005-06-15 04:12) [3]Вот тебе объектно-ориентированный подход :)
-----------------------
Модуль 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
. В обработчикеOnClick
Button"а пишешь: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 05:34) [4]спасибо
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c