Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

нумерация   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
1-1118563903
acsoft
2005-06-12 12:11
2005.07.11
Возможно ли считать свой собственный код?


14-1118666330
Суслик
2005-06-13 16:38
2005.07.11
Как в project group путь.


1-1119339737
pavel_guzhanov
2005-06-21 11:42
2005.07.11
Как преобразовать дату?


14-1118212934
вразлет
2005-06-08 10:42
2005.07.11
Ukraine under attack


1-1119522002
intaari
2005-06-23 14:20
2005.07.11
Сохранение/чтение отчета fast report из BLOd поля