Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi将备忘录输出转换为edit.text_Delphi_Memo - Fatal编程技术网

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

Delphi将备忘录输出转换为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

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

我想获得分配给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瞄准要导入文本编辑框的最后一个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;