Delphi将备忘录输出转换为edit.text
如何将备忘录输出的特定行转换为文本编辑框 我想获得分配给TAP设备适配器至文本框的特定IP地址,并在文本框中添加IP路由,但在将IP导入文本框时,是否有更好的想法或方法可以从TAP设备适配器或任何其他更简单的方法查询IPDelphi将备忘录输出转换为edit.text,delphi,memo,Delphi,Memo,如何将备忘录输出的特定行转换为文本编辑框 我想获得分配给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' Am瞄准要导入文本编辑框的最后一个IP10.8.0.5。使用空格分隔符拆分字符串,并获取最后一个字符串: fun
net30,ping 5,ping-restart 10,socket-flags TCP_NODELAY,ifconfig 10.8.0.6 10.8.0.5'
Am瞄准要导入文本编辑框的最后一个IP
10.8.0.5
。使用空格分隔符拆分字符串,并获取最后一个字符串:
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]);
有关拆分字符串的其他替代方法,请参见
正如David在评论中提到的,通过从字符串后面搜索空格分隔符,可以跳过分配未使用的字符串。这可以通过以下方式实现:
使用空格分隔符拆分字符串,并获取最后一个字符串:
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]);
有关拆分字符串的其他替代方法,请参见
正如David在评论中提到的,通过从字符串后面搜索空格分隔符,可以跳过分配未使用的字符串。这可以通过以下方式实现: 您可以这样做(如果IP始终位于末尾): 您可以这样做(如果IP始终位于末尾):
如果是我,我会从字符串的末尾开始,然后返回,直到找到第一个空格字符。您所需的文本位于右侧
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;
如果是我,我会从字符串的末尾开始,然后返回,直到找到第一个空格字符。您所需的文本位于右侧
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;
在最后一个空格后取出所有文本。你以前做过字符串编程吗?你知道如何提取字符串的一部分吗?在最后一个空格后提取所有文本。你以前做过字符串编程吗?你知道如何提取字符串的一部分吗?我在使用Delphi7,所以我在这行上得到了一个错误:TArray;将整个字符串拆分,创建一个数组和所有这些字符串,却将它们扔掉,这似乎是一种耻辱……@DavidHeffernan,添加了一个没有使用RTL拆分为字符串的示例。但不确定
lastdimiter
是否在D7中。使用Delphi 7,D7Am中存在lastdimiter
,因此我在这行上得到一个错误:TArray;将整个字符串拆分,创建一个数组和所有这些字符串,却将它们扔掉,这似乎是一种耻辱……@DavidHeffernan,添加了一个没有使用RTL拆分为字符串的示例。但不确定lastdimiter
是否在D7中。lastdimiter
在D7中存在,执行所有堆分配实际上毫无意义。为什么不从字符串的右端开始读回,直到找到空间为止。此外,对Pos
的重复调用效率低下且难看。这是一行字符串,大约有10次Pos调用。我们并不是在20世纪70年代节省每一位内存和CPU周期。性能现在和当时一样重要,可以说,复制是一个更大的问题。我同意性能很重要,但如果只是一行,它不会做任何改变。当然,您可以在一个周期内只检查一次pos并将其保存到变量中。但是我的解决方案和你的解决方案没有太大区别。@jano152非常感谢你的方法正在工作,但是它也捕获了一个结束此引号符号10.8.0.5“我如何删除它?执行所有堆分配真的毫无意义。”。为什么不从字符串的右端开始读回,直到找到空间为止。此外,对Pos
的重复调用效率低下且难看。这是一行字符串,大约有10次Pos调用。我们并不是在20世纪70年代节省每一位内存和CPU周期。性能现在和当时一样重要,可以说,复制是一个更大的问题。我同意性能很重要,但如果只是一行,它不会做任何改变。当然,您可以在一个周期内只检查一次pos并将其保存到变量中。但是我的解决方案和你的解决方案没有太大区别。@jano152非常感谢你的方法是有效的,但它也捕获了一个结束此报价的符号10.8.0.5“我如何删除它?”
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;