Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2008, 23:23   #1
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию Уникальный идентификатор

Джентельмены, прошу у вас совета. Предположим создаю некую запись в файле. При этом хочу этой записи присвоить некий уникальный строковый идентификатор, что бы он потом не мог повториться у иных записей при последующим их удалении, добавлении и пр. По идее можно было бы привязать это дело к дате до миллисекунд, но ведь все таки есть вероятность, того, что будет повтор (проблемы с часами на компе или если записи создаются автоматом, а значит очень быстро, то несколько записей создается пракически одномоментно). Можно так же просто присваивать порядковый номер, но тогда, удалив запись, получаем "пробел". Т.е. для создания новой записи надо отсканировать все записи, найдя свободный номер. Какие есть предложения?
Спасибо.
romets вне форума Ответить с цитированием
Старый 02.02.2008, 11:40   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Можно так же просто присваивать порядковый номер, но тогда, удалив запись, получаем "пробел". Т.е. для создания новой записи надо отсканировать все записи, найдя свободный номер. Какие есть предложения?
можно хранить два числа: самый максимальный и последний удалённый, если ещё нет удалённого, то -1. При создании новой записи, если номер последнего удалённого не равен -1, то сохраняем запись туда, иначе сохраняем в следующий за максимальным. Но етсь проблема: если удалить два раза подряд, то номер первого удалённого потеряется, но и это тоже можно решить, например, сохраняя номера удалённых в какой-нибудь массив.
rpy3uH вне форума Ответить с цитированием
Старый 02.02.2008, 12:35   #3
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Спасибо, это мысль! Надо подумать.
romets вне форума Ответить с цитированием
Старый 02.02.2008, 12:35   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Можно так же просто присваивать порядковый номер, но тогда, удалив запись, получаем "пробел". Т.е. для создания новой записи надо отсканировать все записи, найдя свободный номер.
Именно так и нужно, а сканировать ничего не нужно, нужно просто хранить, например, в заголовке, текущее максимальное число, как, например это делается в СУБД. Это всё равно будет уникальная строка, нужно только заранее определиться с разрядностью числа и всё.
B_N вне форума Ответить с цитированием
Старый 02.02.2008, 22:16   #5
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Цитата:
а сканировать ничего не нужно, нужно просто хранить, например, в заголовке, текущее максимальное число
Тогда получается, что будут пропадать удаленные номера. И процесс будет идти накопительно. Это не есть хорошо - т.к. дела то все эти числовые - они не бесконечны, увы.
Я думаю, что достсаточно во-первых хранить максимально свободный номер и в отдельном файле номера удаленных записей, подгружая для новых в первую очередь из этого файла. Пожалуй сделаю так, попробую.
romets вне форума Ответить с цитированием
Старый 02.02.2008, 22:31   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Тогда получается, что будут пропадать удаленные номера.
Ну и что???

Цитата:
Сообщение от romets Посмотреть сообщение
И процесс будет идти накопительно. Это не есть хорошо - т.к. дела то все эти числовые - они не бесконечны, увы.
Кто "не бесконечен"? Числа? Так выберите оптимальную разрядность, пишите туда 256-разрядное число. Вы планируете более десяти в восьмидесятой записей завести?

Цитата:
Сообщение от romets Посмотреть сообщение
Я думаю, что достсаточно во-первых хранить максимально свободный номер и в отдельном файле номера удаленных записей, подгружая для новых в первую очередь из этого файла. Пожалуй сделаю так, попробую.
А если то хозяйство рассинхронизируется? Ну смотрите, пробуйте.
B_N вне форума Ответить с цитированием
Старый 03.02.2008, 01:35   #7
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

Цитата:
256-разрядное число
Прошу прощение за невежество - а как с такими числами работать? Это, гм, что за тип будет?
Цитата:
А если то хозяйство рассинхронизируется?
Резон в вашем замечании имеется.
romets вне форума Ответить с цитированием
Старый 03.02.2008, 01:51   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
Прошу прощение за невежество - а как с такими числами работать? Это, гм, что за тип будет?
Ну, стандартного типа такого нет, хотя, строго говоря, даже типа int64 для практических целей вполне достаточно - трудно представить себе задачу, для которой нужно 10 в 19-й степени записей - писать можно миллиарды лет . А воообще, арифметика больших чисел довольно легко реализуется, особенно на ассемблере, но в Вашем случае (Вы ведь, строго говоря, только складывать такие числа собираетесь) вполне можно обойтись просто десятичной (или двоичной), "текстовой" записью числа и добавлять к ней текстовые же единички, с учетом переноса и т.п., разумеется.
B_N вне форума Ответить с цитированием
Старый 03.02.2008, 02:27   #9
romets
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 32
По умолчанию

"но в Вашем случае (Вы ведь, строго говоря, только складывать такие числа собираетесь) вполне можно обойтись просто десятичной (или двоичной), "текстовой" записью числа и добавлять к ней текстовые же единички, с учетом переноса и т.п., разумеется"
Логично. Благодарю!
romets вне форума Ответить с цитированием
Старый 03.02.2008, 02:30   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от romets Посмотреть сообщение
"но в Вашем случае (Вы ведь, строго говоря, только складывать такие числа собираетесь) вполне можно обойтись просто десятичной (или двоичной), "текстовой" записью числа и добавлять к ней текстовые же единички, с учетом переноса и т.п., разумеется"
Логично. Благодарю!
Но Вы перед тем, как броситесь вручную складывать, всё-таки посмотрите сначала на int64.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как делают уникальный идентификатор строки в БД? sergey113 Помощь студентам 3 05.08.2008 17:48