Страница 1 из 1

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

Добавлено: 21 авг 2016, 09:12
Shouldercannon
Есть функция, собирающая 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;
Есть один нюанс, напрочь отказывается распознавать кириллицу в верхнем регистре в промежутке от А до Р. Помогите, пожалуйста, решить проблему.

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

Добавлено: 21 авг 2016, 12:35
Duncon
При введении уникода оператор поменял функциональность, точно не помню погугли TCharacter, Delphi unicode in итп.

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

Добавлено: 21 авг 2016, 13:24
Shouldercannon

Код: Выделить всё

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;