Показать сообщение отдельно
Старый 30.07.2012, 16:08   #11  
virhundo is offline
virhundo
Участник
 
33 / 16 (1) ++
Регистрация: 29.03.2007
ещё вариант:
я делал такой "финт ушами" для BC 128 в 3.0, едиственный минус - растет длина штрихкода :

X++:
static str IsolateSymbols(str _inputStr)
{
    str       Code128SymbCard ="_!#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz[\]^`{|}~\"\'";
    str       charBC, charBC_prev, charBC_next;
    int       len, i;
    str       encodedStr;
    ;
       //Формирование строки штрихкода
            len = strlen(_inputStr);
            for(i=1; i<=len;i++)
            {
               charBC_prev  = i==1 ? "" : substr(_inputStr,i-1,1);
               charBC       = substr(_inputStr,i,1);
               charBC_next  = substr(_inputStr,i+1,1);
                 //изоляция  руских букв, пробелов, etc
                 if(strfind(charBC,Code128SymbCard,1,1)<=0) // не нашли символ в таблице символов CODE128
                 {
                     charBC  =  int2str(char2num(charBC,1));
                     if(strlen(charBC)<3)
                          charBC = "0"+ charBC; //ascii для пробела, etc
                     //проверка пред. и след. символа
                     //есть некорректный пред. символ
                     if(charBC_prev!="" && strfind(charBC_prev,Code128SymbCard,1,1)<=0)
                         encodedStr      += charBC;
                     else encodedStr     += "{"+ charBC;
                     //есть некорректный след. символ
                     if(charBC_next!="" && strfind(charBC_next,Code128SymbCard,1,1)<=0)
                          encodedStr      += "";
                     else encodedStr     += "}";
                 }
                 else
                 encodedStr += charBC;
              }
   return  encodedStr;
}