Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 959

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите алгоритм
Есть строковая переменная из 4 символов, что то типа ID
Состоит из букв и цифр. Сначала идут буквы, потом цифры и надо увеличивать на 1
Например:
A123. Если заканчиваются цифры(доходит до A999), то берется следующая буква(A999, B001)
Меня интересует, как здесь лучше всего инкрементить такой код?
И еще из общего алгоритма надо убрать спец кода. Например код XX00 или XXXX и т.д. не должны участвовать в общей группе, они должны пропускаться
Есть какие то мысли?

Заранее, спасибо!

Irbis Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Irbis (статус: Посетитель)
Вопрос отправлен: 1 июля 2009, 11:50
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 1 июля 2009, 13:19; участников в обсуждении: 4.
Dron

Dron (статус: Студент), 1 июля 2009, 12:05 [#1]:

А в чём, собственно, проблема? Берёте последние 3 символа строки, преобразуете в число, увеличиваете его. Если стало 1000, то меняете первую букву на следующую.
С уважением.
Пупкин В В

Пупкин В В (статус: 2-ой класс), 1 июля 2009, 12:08 [#2]:

если я правильно понял, то лучше использовать массив.
Dron

Dron (статус: Студент), 1 июля 2009, 12:12 [#3]:

Зачем массив? Весь набор ключей хранить? Они же легко генерятся.
С уважением.
Irbis

Irbis (статус: Посетитель), 1 июля 2009, 12:34 [#4]:

Не будет ли тормозить вычисления, когда я буду перебирать полученный код со спецкодами(их может быть много). Можно ли создать что то типа множества, что бы узнать, входит ли данный код в это множество или нет?
Amidamaru

Amidamaru (статус: 4-ый класс), 1 июля 2009, 12:54 [#5]:

Я немного не понял насчет "из общего алгоритма надо убрать спец кода." но в общем всё делается как сказал Dron
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Пупкин В В

Пупкин В В (статус: 2-ой класс), 1 июля 2009, 13:00 [#6]:

наверно не правильно понял.
подумалось что надо менять название самой переменной а не её значение.
Dron

Dron (статус: Студент), 1 июля 2009, 13:03 [#7]:

Тормозить не будет - тут преобразования-то простые получаются вроде.
Узнать входит или нет - вот тут уже массив нужно делать. Либо как-то алгоритмически по самому ID проверить (например, если первый символ - буква, а остальные - цифры, то входит).
С уважением.
Dron

Dron (статус: Студент), 1 июля 2009, 13:06 [#8]:

Вот, кстати, ещё мысль: можно работать не со строками, а просто с числами. Тогда первая буква будет определяться числом тысяч в номере: 0 - A, 1 - B, 2 - C и т.д.:
0001 = A001
1456 = B456
2999 = C999
и т.п. С числами работать будет ещё быстрее, чем со строками. Да и инкрементность тогда будет простейшая: увеличиваем число, а потом просто его перегоняем в буквенно-цифровой формат (т.е. заменяем первую цифру на соответствующую букву). Для букв второго десятка, соответственно, числа уже пойдут пятизначные.
С уважением.
Amidamaru

Amidamaru (статус: 4-ый класс), 1 июля 2009, 13:19 [#9]:

А можно в качестве счетчика использовать простой целый тип (Cardinal например, или int64) и только когда нужно отобразить - преобразовывать его в нужную строку.
<code>
procedure TForm1.SpinEdit1Change(Sender: TObject);
var C:Cardinal;
s:string;
const ordA = ord('A');
begin
c:=SpinEdit1.Value;
s:=chr((c div 1000)+ordA)+format('%.3d',[c mod 1000]);
label1.Caption:=s;
end;
</code>
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.