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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

21 авг 2016, 09:12

Есть функция, собирающая 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;
Есть один нюанс, напрочь отказывается распознавать кириллицу в верхнем регистре в промежутке от А до Р. Помогите, пожалуйста, решить проблему.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

21 авг 2016, 12:35

При введении уникода оператор поменял функциональность, точно не помню погугли TCharacter, Delphi unicode in итп.
[syntax=Delphi] [/syntax]
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

21 авг 2016, 13:24

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

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;
Ответить