Получить некое уникальное значение (желательно чисто цифровое)

Omh

Lotus team
04.07.2007
2 210
1
#1
Камрады, моё почтенде!

Встала задача получить некое уникальное значение (будет использоваться как название для папки).
@Unique не катит, т.к. там участвует часть имени пользователя, а соответсвенно могут вылезти кириллица, всякие умляуты и т.д.
Т.е. очень желательно получить уникальное цифровое значение.

Какие значения были до этого, я не знаю, т.е. принцип "предидущее значение + 1" не годиться.

В течении секунды может быть сгенерировано n уникальных значений, т.е. текущее время тоже пролетает.

В идеале, цикл выполняющийся в пределах секунды
Код:
For i = 1 To 100
Print UniqueValue()
Next
должен выпечатаь 100 значений, но, по идее, сгодиться и если число сгенерированных значений будет >80 думаю мне этого хватит.

Пока что смотрю в сторону
Код:
Randomize
UniqueValue = Cstr(Rnd()) + Cstr(Getthreadinfo(6)) ' LSI_THREAD_TICKS
Но такая конструкция выполненная в цикле менее секунды 100 выдаёт только 11 уникальных значений.
Куда бы добавить соли?
Спасибо!

Можно, конечно ввести глобальный счётчик, но пока не хотелось бы.
Ани айдиас аппришиэйтед!

Добавлено: Ща попробовал с глобальным счётчиком, вообще работает.
Т.е. объявил ненавистную мной глобальную переменную и использую её как часть уникального значения.
Т.е. в пределах одного запуска цикла всё получается, как надо.

Добавлено: Уточню, что мне вообще и надо в пределах одного запуска.
Вообщем, похоже, проблема решена с помощью приватной глобальной переменной.
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
почему бы в Уникью просто не заменять кирилицу ?
 

Omh

Lotus team
04.07.2007
2 210
1
#3
Morpheus
В России - кириллица
В Латвии - латышица
В Замбии - замбица
Не хочу заморачиваться.

Но вообще, если потеоретизировать насчёт сферического коня в вакууме, то возможно ли не используя глобальную переменную всё время генерировать уникальные значения?
Что-то мне подсказывает, что это не совсем тривиальная задача.
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
нууууууууу... может просто плодить документы и брать их нотеИд

Добавлено: и возможно j2ls + ( JAVA-рандом ) будет быстрее?
 

Omh

Lotus team
04.07.2007
2 210
1
#6
и возможно j2ls + ( JAVA-рандом ) будет быстрее?
Ну, чем просто прибавлять единичку к глоб. переменной - вряд ли.
Я просто не понимаю, почему это я думал, что мне надо уникльное значение вне времени и пространства.
На самом деле, мне надо было уникальное значение в пределах запуска, что решается, как 2 пальца об асфальт.
Вообщем, протормозил я :)

Добавлено: Типа создавать временные документы в пямяти и брать их UNID?
Можно, как вариант.
Но, мне на самом деле, такой способ не очень нравится.
Как то мне не по душе деланье пустышек, которые потом и удаляются.


Кстати, таким способом у меня сделано получаение серверного времени:
Код:
Dim newDoc as NotesDocument
Set newDoc = db.CreateDocument
ServerTime = NewDoc.Created
Под шумок спрошу, ни у кого нет лучше способа без пустышки и без Evaluate(Formula)?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
Типа создавать временные документы в пямяти и брать их UNID?
Можно, как вариант.
Но, мне на самом деле, такой способ не очень нравится.
Как то мне не по душе деланье пустышек, которые потом и удаляются.
Создаешь папку, смотришь её UNID и меняешь имя на этот UNID.
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#11
Типа создавать временные документы в пямяти и брать их UNID?
Можно, как вариант.
Но, мне на самом деле, такой способ не очень нравится.
Как то мне не по душе деланье пустышек, которые потом и удаляются.
необязательно документы создавать, можно @password использовать
 

Xalet

Well-known member
08.08.2008
410
0
#12
Генерить любой уникальный текст, хоть и тот же @Unique, и переделать в какой MD5 хеш. Да и nvy хорошенький линк подкинул.