Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
3-1117083340
Dmitry_VP
2005-05-26 08:55
2005.07.11
Firebird


1-1118151224
Ded Moroz
2005-06-07 17:33
2005.07.11
TListView


1-1119483831
paule
2005-06-23 03:43
2005.07.11
Прогресс бар


6-1112615487
NikeOLD
2005-04-04 15:51
2005.07.11
Можно ли получить список модемов не используя реестр (как?)


1-1119596604
Lexander
2005-06-24 11:03
2005.07.11
Регистрация ActiveX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский