2016-08-23 20 views
-1

我想捕获填充到备注文本框中的动态网关IP。 如何使用通配符或捕获以“网关:10.127。*。*”开头的整个网关线并将网关IP置于文本框中。如何捕获要编辑的备注文本德尔福

这里是备忘录的文本已经捕获的例子:

Description: Microsoft Hosted Network Virtual Adapter 
HW Address Length: 6 
HWAddress: E0:2A:82:F9:B2:3E 
Index: 32 
Type: 71 
CurrentIPAddress: 
IP Addresses: 192.168.48.1/255.255.255.0 
Gateway: 0.0.0.0/255.255.255.255 
Name: {22712B8F-5E3A-48D4-8C0D-771708BF0305} 
Description: HUAWEI Mobile Connect - Network Card 
HW Address Length: 6 
HWAddress: 0C:5B:8F:27:9A:64 
Index: 4 
Type: 243 
CurrentIPAddress: 
IP Addresses: 10.127.144.193/255.255.255.252 
Gateway: 10.127.144.194/255.255.255.255 

编辑:(从评论)

I:= Pos('Gateway: 10.127.', Memo1.Text); 
if I > 0 then begin 
    L := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, (intTostr(1)); 
    edit1.Text:=(intTostr(L)); 
+1

德尔福什么版本的?最近的版本支持可用于帮助这里的正则表达式;早期版本不。 –

+0

正在使用Delphi 7 –

+0

你觉得这有什么挑战吗?为什么你使用GUI控件进行文本处理?你的代码是什么样的?你希望我们会为你写代码吗? –

回答

1

Easist的方式来实现,这将是遍历备忘录的线条和检查它以“网关:10.127”开头。

例如:

for LString in memo.Lines do 
    if AnsiStartsText('Gateway: 10.127.', LString) then 
    textbox.Caption := LString 

您可以使用正则表达式,以及更具体的处理。

+0

霍夫曼没有实现这个方法 –

+3

Delphi 7没有for .. in循环,也没有提到可能有帮助的正则表达式,你需要使用for循环和索引,a有点像:for I:= 0 to memo.lines.count -1 do –

3

这是一个Delphi 7版本勒的回答:

var 
    ii: integer 
begin 
    for ii := 0 to memo.lines.count -1 do begin 
    if pos('Gateway: 10.127.', memo.lines[ii]) > 0 then begin 
     textbox.caption := memo.lines[ii]; 
     break; 
    end; 
    end; 
end; 
+0

非常感谢@Micheal Vicent它的效果很好它的捕获 如何删除网关:单词,只保留结果在 '10.127.' –

+6

@JkRobbin你认为这样做会怎样?你真的放弃了自己解决这个问题的所有希望吗?这是简单的文本处理。不要在评论中提出新问题。为什么找不到教程或教科书甚至文档。当然,你不是第一个想要提取子字符串的人?你确定你不能为自己工作吗?我知道我听起来很刺耳,但你根本没有足够努力,而且这个网站并不打算教新手如何做基本的任务。请访问[帮助]。我们在这里建立一个对未来访问者有用的问答帖子资源。 –

+2

仅用于完整性:您不能相信已创建和捕获的文本中的空格或标记!这里是,不是100%,但更好:'如果pos('GATEWAY:10.127。',UpperCase(StringReplace(Memo1.lines [ii],'','',[rfReplaceAll])))> 0则' –