Delphi 将备忘录输出转换为 edit.text

Delphi converting memo output to edit.text

如何将特定行的备忘录输出到文本编辑框?

我想获得分配给 TAP 适配器的特定 IP 地址到文本框,我在文本框中添加了 IP 的路由,但是在将 IP 导入到文本框时遇到了问题,有没有更好的主意或方法我可以从 TAP 设备适配器或任何其他更简单的方法查询 IP?

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

我针对最后一个IP10.8.0.5要导入到文本编辑框。

用 space 分隔符使用 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;

请参阅 here 以了解其他拆分字符串的方法。


正如 David 在评论中提到的,您可以通过从字符串后面搜索 space 分隔符来跳过分配未使用的字符串。这可以通过 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;

你可以这样做(如果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;

如果是我,我会从字符串的末尾开始,然后往回查找,直到找到第一个 space 字符。您需要的文字可以在右侧找到。

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;