Главная страница
    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.056 c
14-1118754638
_HawkEye
2005-06-14 17:10
2005.07.11
у кого нить есть полное описание модели COCOMO II


3-1117267100
Iova
2005-05-28 11:58
2005.07.11
Как можно получить список справочников в 1С?


3-1117090760
Tomkat
2005-05-26 10:59
2005.07.11
Скрипт на базе штатными средствами


8-1110291092
Delta
2005-03-08 17:11
2005.07.11
увеличить без тормозов


9-1110377372
mr_Coder
2005-03-09 17:09
2005.07.11
Вопрос новичка по GLScene





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский