Delphi конвертирует вывод заметок в edit.text

Как я могу преобразовать определенную строку заметки, помещенную в текстовое поле редактирования?

Я хотел бы получить конкретный IP-адрес, назначенный адаптеру TAP в текстовое поле, и я добавляю маршрут IP в текстовое поле, но я стою при импорте IP в текстовое поле. Есть ли лучшая идея или способ запросить IP от адаптера устройства TAP или любого другого более простого метода?

net30,ping 5,ping-restart 10,socket-flags TCP_NODELAY,ifconfig 10.8.0.6 10.8.0.5'

Стремлюсь к последнему IP 10.8.0.5 быть импортированным в текстовое поле редактирования.

3 ответа

Решение

Разделите строку разделителем пробелов с помощью TStringHelper.Split и возьмите последнюю строку:

function FilterIP(const s: String): String;
var
  splitted: TArray<String>;
begin
  if (s = '') then
    Result := ''
  else begin
    splitted := s.Split([' ']);
    Result := splitted[Length(splitted)-1];
  end;
end;

myEdit.Text := FilterIP(MyMemo[myLine]);

Вы также можете использовать StrUtils.SplitString для разделения строки.

В Delphi-7 вы могли бы использовать DelimitedText in TStringList:

sList.Delimiter := ' ';
sList.DelimitedText := s;

Смотрите здесь для других альтернатив, чтобы разбить строку.


Как отметил Дэвид в комментарии, вы можете пропустить выделение неиспользуемых строк, выполнив поиск разделителя пробелов в конце строки. Это можно сделать с помощью SysUtils.LastDelimiter:

function FilterIP(const s: String): String;
var
  lastIx: Integer;
begin
  lastIx := LastDelimiter(' ',s);
  if (lastIx > 0) then
    Result := Copy(s,lastIx+1)
  else
    Result := '';
end;

Если бы это был я, я бы просто начал с конца строки и работал до тех пор, пока не нашел первый пробел. Ваш требуемый текст - это то, что можно найти справа.

function FilterIP(const s: string): string;
var
  i: Integer;
begin
  i := Length(s);
  while (i>=1) and (s[i]>' ') do
    dec(i);
  Result := Copy(s, i+1, MaxInt);
end;

Вы можете сделать это так (если IP всегда в конце):

var tmp_str: String;
...
tmp_str:=Memo1.Lines[0]; //change the 0 to your desired line
while(Pos(' ', tmp_str)>0)do Delete(tmp_str, 1, Pos(' ', tmp_str));
Edit1.Text:=tmp_str;
Другие вопросы по тегам