The Unofficial Newsletter of Delphi Users - by Robert Vivrette

Еще один пример работы оператора  Case со строками

By Henrik P. Hansen - hphansen@agora.dk

Перевод Руденко Е.В.   janer@newmail.ru    апрель 2001 года

 

Я хочу добавить элегантное и простое решение к статье  'Один из путей использования оператора  Case со строками' .

Мое решение - это функция TokenNumber...

 

function TokenNumber(Source : string; const Delimeter, Token : string) : integer;

Ниже приведен пример использования ...

 

           {s = ?}
           case TokenNumber('CASE;ON;STRINGS;POSSIBLE;SOLUTION', ';', s) of
             1 : ShowMessage('s = ''CASE''');
             2 : ShowMessage('s = ''ON''');
             3 : ShowMessage('s = ''STRINGS''');
             4 : ShowMessage('s = ''POSSIBLE''');
             5 : ShowMessage('s = ''SOLUTION''');
             else
               ShowMessage('s = unknown value');
           end;
А вот сам код для функции  TokenNumber...

 

function TokenNumber(Source : string; const Delimeter, Token : string) : integer;
var
  i : integer;
begin
  Result := 1;
  while Result > 0 do {по всем "токенам" в строке Source}
  begin
    i := Pos(Delimeter, Source);

    if ((i > 0) and (Token = Copy(Source, 1, i - 1))) or
       ((i = 0) and (Token = Source)) then               {если верно, то     }
      Break;                                             {конец              }

    if i > 0 then                                  {если "токенов" больше ,то}
      Delete(Source, 1, i + Length(Delimeter) - 1) {обрезание "не согласованных токенов" }
    else                                           {либо                     }
      Result := -1;                                {конец                    }

    Inc(Result);
  end;
end;
 

Возврат в Tips&Tricks