Книга знаний

1С:Предприятие

Реализация _IdToStr и _StrToID в Delphi и в 1С 8

Перевод чисел в 36-ю систему счисления и обратно.Автор статьи: romix | Редакторы: Amiralnar
Последняя редакция №2 от 21.08.11 | История
URL: http://kb.mista.ru/article.php?id=451

///////////////////////////////////////////////////////////////////////
function _IdToStr(i: Integer): String;
var s: String;
var ost: Integer;
var c: char;
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
   if i>=2147483647 then Raise Exception.Create('Ожидается число < 2147483647');
   if i<0 then Raise Exception.Create('Ожидается значение >=0');

   s:='';
   repeat
     ost:=i mod 36;
     i:=i div 36;
     c:=chars[ost+1];
     s:=c+s;
   until i=0;
   while Length(s)<6 do begin
    s:=' '+s;
   end;

   Result:=s;
end;


///////////////////////////////////////////////////////////////////////
function _StrToId(s: String): Integer;
var
c: char;
i: Integer;
p: Integer;
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
  Result:=0;
  s:=trim(s);
  if Length(s)>6 then Raise Exception.Create('Ожидается строка не длиннее 6 символов: '+s);
   for i:=1 to Length(s) do begin
     c:=s[i];
     p:=pos(c, chars)-1;
     if p<0 then Raise Exception.Create('Ожидается символ '+chars);
     Result:=Result*36;
     Result:=Result+p;
   end;
   if Result<0 then Raise Exception.Create('На входе слишком большое значение: '+s);

end;

///////////////////////////////////////////////////////////////////////
Функция ИдВСтроку(Знач Число) Экспорт
    СтрокаСимволов = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Результат = "";
    Пока Число>0 Цикл
        Остаток = Число%36;
        Число = Цел(Число/36);
        Символ = Сред(СтрокаСимволов, Остаток + 1, 1);
        Результат = Символ + Результат;
    КонецЦикла;
    Возврат Прав("000000" + Результат, 6);
КонецФункции

///////////////////////////////////////////////////////////////////////
Функция СтрокуВИд(Знач Строка) Экспорт
    СтрокаСимволов = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Результат = 0;
    Строка = СокрЛП(Строка);
    Для Сч = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, Сч, 1);
        Позиция = Найти(СтрокаСимволов, Символ) - 1;
        Результат = Результат * 36;
        Результат = Результат + Позиция;
    КонецЦикла;
    Возврат Результат;        
КонецФункции

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика