Оператор IN и Unicode Delphi XE10

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Есть функция, собирающая URL, перебирая каждый символ
Код:
function GetUrl(txt: String): String;
var
  I: Integer;
  Passed: Boolean;
begin
  Result := '';

  for I := 1 to Length(txt) do
  begin
    Passed := False;
    if not Passed then if (AnsiChar(txt[I]) in ['!', '"', '#', '$', '%', '&', '''', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '`', '{', '|', '}', '~']) then Passed := True;
    if not Passed then if (AnsiChar(txt[I]) in ['0'..'9', 'a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я']) then Passed := True;
    if Passed then Result := Result + txt[I] else Break;
  end;
end;

procedure TForm5.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := 'АБВГДЕЁЗЖИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  Edit1.Text := GetUrl(s);
end;
Есть один нюанс, напрочь отказывается распознавать кириллицу в верхнем регистре в промежутке от А до Р. Помогите, пожалуйста, решить проблему.

Решено
Код:
function GetUrl(txt: String): String;
const
  Simbols  = '!"#$%&''()*+,-./:;<=>?@[]^_`{|}~0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
var
  I: Integer;
  Passed: Boolean;
begin
  Result := '';

  for I := 1 to Length(txt) do
  begin
    Passed := False;
    if not Passed then if Simbols .Contains(txt[I]) then Passed := True;
    if Passed then Result := Result + txt[I] else Break;
  end;
end;
 
Последнее редактирование: