2016-10-24 7 views
-1

Моя БД возвращает мне значение, подобное «CJana001», и теперь я хотел увеличить его до «CJana002» и вставить новую строку и сохранить в DB (MySql) назад, это 'CJana001' имеет строковый тип.Принудительное значение, подобное 'CJana001' в delphi object pascal

Максимальное приращение ограничено в диапазоне от 001 до 999, оно не должно увеличиваться после CJana999. и CJana может варьироваться в зависимости от выбора пользователя. максимальная длина строки без чисел 5 и минимальная длина равна 1.

CJana001 может что-нибудь подобное C_Lang001 или C++ 001 или PHP001 и т.д ..

Как справиться с этим в Delphi Программирование?

+1

Пытались ли вы что-нибудь? – MBo

+1

Я пробовал использовать inc(), но это не сработало. – userhi

+1

Какие у вас были проблемы? – RBA

ответ

2

Как бы вы справились с ним и на любом другом языке: начните с последнего байта и увеличьте его. Если он уже самый высокий, установите его самым низким и повторите свой рабочий процесс с байтом раньше. Если байт больше нет, добавьте новый байт спереди с наименьшим значением.

«Наивысший» и «самый низкий» являются свободно определяемыми - в мире ASCII (и придерживаться вашего примера) Я предлагаю использовать 30 долларов США. $ 39, $ 41 .. $ 5A и $ 61 .. $ 7A. И как вы отметили его Delphi Я бы определил константу String, просто удерживая эти байты, чтобы вы могли легко получить к ним доступ от первого до последнего.

Edit: благодаря вашим пояснениям в комментариях, было бы проще просто сделать это:

var 
    iNumber: Integer; 
    sOld, sNew: String; 
begin 
    sOld:= 'CJana001'; // Wherever this comes from 
    iNumber:= StrToInt(Copy(sOld, Length(sOld)- 2, 3)); // Grab number part 
    if iNumber< 999 then Inc(iNumber); // Prevent overflow 
    sNew:= IntToStr(iNumber); 
    while Length(sNew)< 3 do sNew:= '0'+ sNew; // Grow to 3 digits 
    sNew:= Copy(sOld, 1, Length(sOld)- 3)+ sNew; // Prepend text part 
+0

Ваш код работает нормально, но число может начинаться в любой позиции, но не в нулевой позиции. По крайней мере, должно быть одно строковое значение. он будет похож на C001, CP0001, CPP001, CJava001. Как мы справимся с этим с помощью кода. – userhi

+0

Осмотрите последний символ: это ''0' .. '9' 'перейти к предыдущему. И так далее, пока это не соответствует. Это дает вам начальную позицию и длину того, что нужно захватить. – AmigoJack

+0

Есть ли какие-либо функции, которые нужно выполнять, как сказано. вы можете направить меня. – userhi