• 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) но до конца не понял.

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

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

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


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

3 ответа на этот вопрос

  • 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)

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


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

    • От Евгений Корепов
      Обнаружил очередной глюк 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 пользователей онлайн

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