Перейти к содержанию
  • Регистрация
  • 0
x11

Цикл по unicode строке

Вопрос

function OnlyDec(const s: String): string;
Var
 ch: char;
 i: integer;
begin
  for i := 0 to s.Length do
    if CharInSet(s[i], ['0'..'9']) then
      result := result + s[i];

или
  for i := low(s) to High(s) do
    if CharInSet(s[i], ['0'..'9']) then
      result := result + s[i];

или
  for ch in s do
    if ch in ['0'..'9'] then
      result := result + ch;

или
  for ch in s do
    if CharInSet(ch, ['0'..'9']) then
      result := result + ch;
end;

Почитал http://docwiki.embarcadero.com/RADStudio/Tokyo/en/String_Types_(Delphi) но до конца не понял.

Как всё-таки более правильно сделать цикл по строке?

Я склоняюсь к последнему варианту.

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

В общем, оказалось, что "'CharInSet' is deprecated: 'Use TCharHelper functionality'"

Правильно вот так:

uses System.Character;
...
...
  for ch in s do
    if ch.IsInArray(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then
      result := result + ch;

или "IsDigit" если нужны только цифры

  for ch in s do
    if ch.IsDigit then
      result := result + ch;

http://docwiki.embarcadero.com/Libraries/XE7/en/System.Character.IsDigit

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В чем простота?

if ch.IsDigit then

vs

'1234567890'.Contains(ch)

В обоих случаях одна строка кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Евгений Корепов
      Обнаружил очередной глюк Tokyo - сломали Text в Android. А именно порушили раскраску символов Юникода.
      Воспроизводится просто :
      procedure TFormMain.FormCreate(Sender: TObject); Var Text1: TText; begin Text1:=TText.Create(Self); Text1.Text:='|' + Char($2713) + '|'; Text1.Font.Size:=48; Text1.Color:=TAlphaColorRec.Red; Text1.Align:=TAlignLayout.Client; Text1.TextSettings.HorzAlign:=TTextAlign.Center; Text1.TextSettings.VertAlign:=TTextAlign.Center; FormMain.AddObject(Text1); end; На первом скриншоте этот код выполнен в Berlin, все выглядит как задуманно. На втором скриншоте этот же код в Tokyo.


    • От x11
      Почему этот цикл "видит" только первый уровень дерева?
      Тогда как правильно организовать поиск нужного TreeViewItem`а по всем узлам, по всему дереву?
       
      function TfmTree.FindItemByIndex(id_parent: Integer): TTreeViewItem; var i: Integer; begin Result := nil; for i:= 0 to Pred(TreeView1.Count) do if TreeView1.Items[i].Tag = id_parent then begin Result := TreeView1.Items[i]; break; end; end;  
    • От kvantum
      Здравcтвуйте !
      После записи в таблицу иероглифов, например "日本人", в ней отображаются вопросы "???".
      Какие настройки необходимо произвести с компонентами FireDAC для корректной записи/отображения иероглифов? 
      Пример: Ieroglifs.zip
    • От AndreyS
      Доброго всем дня! У меня в  самый неподходящий момент возникла следующая проблема:
       
      Есть приложение для Win и Mac. Работает с SQLite (Через FDQuery).
      Естественно, в базе куча данных с кириллицей. Так вот, на Win - все нормально, на одном Mac(10.10) - тоже все хорошо. Попробовал поставить на второй Mac(10.9.5) - b и вот там уже начались проблемы с кодировкой. Причем, читает из таблицы 
      S := Query.FieldByName('Title').AsString; //Без проблем а вот при записи в таблицу
      Query.ParamByName('Title').AsString := 'Заголовок'; В таблицу записывается '????????' (Причем именно запись идет неправильно). При подключении к базе Указываю, что StringFormat=Unicode.
       
      Может кто-то сталкивался с таким уже?
       
      Есть подозрения, что на 10.9.5 какая-то старая dylib, которая неправильно работает с кириллицей. тогда, наверное, нужно подключать свою к приложению, но опять же, где ее взять и как подключить? 
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...