1

如何将特定的备忘录行转换为文本编辑框?

我想将分配给 TAP 适配器的特定 IP 地址分配到文本框中,并在文本框中添加 IP 的路由,但是在将 IP 导入文本框时堆栈是否有更好的想法或方法可以查询 IP从 TAP 设备适配器或任何其他更简单的方法?

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

10.8.0.5我的目标是要导入文本编辑框的最后一个 IP 。

4

3 回答 3

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;

有关拆分字符串的其他替代方法,请参见此处


正如 David 在评论中提到的那样,您可以通过从字符串后面搜索空格分隔符来跳过分配未使用的字符串。这可以通过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;
于 2016-06-20T07:13:10.947 回答
2

如果是我,我会从字符串的末尾开始,然后再继续工作,直到找到第一个空格字符。您需要的文本可以在右侧找到。

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;
于 2016-06-20T08:14:39.400 回答
0

你可以这样做(如果 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;
于 2016-06-20T08:06:03.427 回答