Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Процедура генерации случ строки. [D6, Win2k]


denis24 ©   (2004-07-12 12:31:00) 

Делаю сабж.Для начала хочу получить число содержащее секунды + милисекунды или что то вроде этого.Так вот как получить эти милисекунды и секунды сист.времени?


Sergey Kaminski   (2004-07-12 13:58:00) [1]

А обязательно нужно из 8 символов? А то иначе можно было бы GUID использовать - Microsoft гарантирует уникальность :)


Sheng   (2004-07-12 13:19:00) [2]

const
 mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

function GenerateString8: String;
var
 i: Integer;
begin
 Result:='';
 for i:=1 to 8 do Result:=Result+mCode[Random(Length(mCode))+1];
end;

...
Randomize;  // в OnCreate главной формы - обязательно

сойдёт?


Anatoly Podgoretsky   (2004-07-12 13:16:00) [3]

Включи проверку диапазонов


denis24   (2004-07-12 13:15:00) [4]

должна быть строка из восьми случ букв которая формируется из символов константы.
mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

В показаной процедуре я выбираю из сроки случ символы и формирую эту строку.
Но как , я понимаю ,надо где то поставить задержку потому что два раза подряд эта процедыра выдает одинаковую строку.


Sheng   (2004-07-12 13:04:00) [5]

Так и не понял, что надобно сгенерировать.

Uses ...., DateUtils;

var
 tt: TDateTime;  // он же Double

tt:=Now;   // текущее дата и время
tt:=Date;  // тока дата
tt:=Time;  // тока время

Если надо случ. время - то
tt:=Random;
st:=TimeToStr(tt); // время в виде строки
sec:=SecondOf(tt); // секунды времени

напиши, плз, каков должен быть результат (примера 3..4) работы процедуры


denis24   (2004-07-12 12:56:00) [6]

Посмотрите пожалуста мою процедуру.Все вроде ок.Но формирование этого случайного числа прозодит так быстро,что даже в одну милисекунду формируюся два один случ строки.
Как этим можно управлять?

Function FDecTo68(mDec : Int64) : String;
Const
mCode = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Begin
Result:='';
While mDec > 67 Do
 Begin
 if (mDec Mod 68)+1>61 then
 result:='%'+result
 else
  Result := mCode[(mDec Mod 68)+1] + Result;
  mDec := mDec Div 68;
 End;
Result := mCode[mDec+1] + Result;
End;

Function FGetRefs : String;
Var
      mRand : Int64;
Begin
mRand := GetTickCount*86400000;
Result:=FDecTo68(mRand);
end;


Fay   (2004-07-12 12:52:00) [7]

GetSystemTime


MBo   (2004-07-12 12:41:00) [8]

Исследуй в хелпе date/time routines


Думкин   (2004-07-12 12:40:00) [9]

Юзай GetTickCount


Наверх

Титульная страница Поиск, карта сайта Написать письмо