Как удалить цифры в строке букв Delphi - PullRequest
0 голосов
/ 04 мая 2018

У меня есть строка, я задаю координаты для выбора букв, но иногда они смешиваются, и я спрашиваю координаты с числами, как мне это сделать, если, например, '105DYUDXB28DYU13' сделал это 'DYUDXBDYU'

tmpT.Put:=Trim(MidStr(S,8,6))+Trim(MidStr(S,37,3));

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Также код с процедурой и параметром var:

procedure RemoveNumbers(var Text: String);
var
    Index: Integer;
begin
    for Index := Length(Text) downto 1 do
         if Text[Index] in ['0'..'9']
         then Text := Copy(Text, 1, Index - 1) + Copy(Text, Index + 1, Length(Text) - Index);
end;

var
    Text: String;

begin
    Text := '105DYUDXB28DYU13';
    RemoveNumbers(Text);
    WriteLn(Text);
end.
0 голосов
/ 04 мая 2018

Решение с хорошей производительностью выглядит следующим образом (uses Character):

function RemoveNumbers(const AString: string): string;
var
  i, j: integer;
begin
  SetLength(result, AString.Length);
  j := 0;
  for i := 1 to AString.Length do
    if not AString[i].IsDigit then
    begin
      inc(j);
      result[j] := AString[i];
    end;
  SetLength(result, j);
end;

Эта функция использует несколько языковых и библиотечных функций, появившихся после Delphi 7. Чтобы это работало в Delphi 7, вам нужно немного переписать его:

function RemoveNumbers(const AString: string): string;
var
  i, j: integer;
begin
  SetLength(result, Length(AString));
  j := 0;
  for i := 1 to Length(AString) do
    if not (AString[i] in ['0'..'9']) then
    begin
      inc(j);
      result[j] := AString[i];
    end;
  SetLength(result, j);
end;

Мелкий шрифт: TCharHelper.IsDigit поддерживает Unicode и поэтому вернет true для всех цифр Unicode. Например, он вернет true для

  • ٣ (U + 0663: АРАБСКО-ИНДИКАТОРНАЯ ЦИФРА ТРЕТЬЯ),
  • ੪ (U + 0A6A: ЦИФРОВАЯ ГУРМУХИ ЧЕТВЕРТАЯ),
  • ௫ (U + 0BEB: TAMIL DIGIT FIVE),
  • ៥ (U + 17E5: KHMER DIGIT FIVE) и
  • ᠗ (U + 1817: СЕМЬ МОНГОЛЬСКОГО ЦИФРА).

Если вы хотите использовать только символы '0'..'9' как цифры, вы можете использовать модернизированную версию теста Delphi 7:

if not CharInSet(AString[i], ['0'..'9']) then
...