Regexmach,结果存储区GUI编辑框

时间:2019-05-08 18:07:04

标签: autohotkey

我有一个文本,在此文本中,数据已更改,我想收集必要的数据并显示在gui文本框中。 第一个脚本是gui,secound脚本可以从文本中收集数据。 我希望仅将值加载到这些编辑框中。

例如:

UserInput1托尼

UserInput2 Stark

UserInput3 34234u4

ect ...

第一

Gui, Add, Edit, x22 y39 w190 h20 vUserInput1 readonly,  
Gui, Add, Edit, x22 y79 w190 h20 vUserInput2 readonly,
Gui, Add, Edit, x22 y119 w190 h20 vUserInput3 readonly,
Gui, Add, Edit, x22 y159 w190 h20 vUserInput4 readonly,
Gui, Add, Edit, x22 y199 w190 h20 vUserInput5 readonly,
Gui, Add, Edit, x22 y239 w190 h20 vUserInput6 readonly,
Gui, Add, Edit, x22 y279 w190 h20 vUserInput7 readonly,
Gui, Add, Edit, x22 y319 w190 h20 vUserInput8 readonly,
Gui, Add, Edit, x22 y359 w190 h20 vUserInput9 readonly,
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h508 w242, New GUI Window
Return

GuiClose:
ExitApp

次要

str=
(
|-----------------------------------+-+-----------------------------------|
| Title | |Mr. |
|-----------------------------------+-+-----------------------------------|
| First Name * | |TONY |
|-----------------------------------+-+-----------------------------------|
| Last Name * | |STARK |
|-----------------------------------+-+-----------------------------------|
| Please select the reference | |Rental Agreement Number |
| number type you can provide * | | |
|-----------------------------------+-+-----------------------------------|
| Providing Number / ID * | |1111111 |
|-----------------------------------+-+-----------------------------------|
| Reservierungsnummer | |34234u4 |
|-----------------------------------+-+-----------------------------------|
| Country of Rental * | |usa |
|-----------------------------------+-+-----------------------------------|
| Rental Station[<BR>](address) | |Airport |
|-----------------------------------+-+-----------------------------------|
| Pick-Up Date | |15/04/2019 |
|-----------------------------------+-+-----------------------------------|
| Return Date | |18/04/2019 |
|-----------------------------------+-+-----------------------------------|
| E-Mail Address * | |tony.stark@pwaero.utc.com |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
| | | |
|-----------------------------------+-+-----------------------------------|
)
Loop, Parse, str, `n, `r
{
    If (RegExMatch(A_LoopField,"^\|------|^\| \||Title|Agreement|type") > 0 )
        continue
    m := StrSplit(A_LoopField, "|")

    gui, add, text, xm,% m[4]
}

return

GuiEscape:
GuiClose:
Esc::
  ExitApp
return

1 个答案:

答案 0 :(得分:0)

我假设您要执行的操作是从第二个脚本中的字符串加载只读“编辑”控件的字段。

为了更改“编辑”控件的内容,并假设您从创建GUI的同一脚本中进行更改,可以使用GuiControl命令,并使用子命令Text您可以设置已经创建的控件的文本,而不是向GUI添加新的Text控件。

此命令的语法为:

GuiControl, Text, ControlID[, Value]

ControlID是与当前控件关联的变量(UserInput1UserInput2等)(或类的名称和实例号(在您的情况下,{ {1}},Edit1及之后),或控件的唯一标识符,其HWND)。

例如,您可以用以下代码替换循环:

Edit2

哪个可以解决问题。 注意,每次我都使用count变量来引用正确的Edit控件。
您不必担心Edit控件为count = 1 Loop, Parse, str, `r`n, { If (RegExMatch(A_LoopField,"^\|------|^\| \||Title|Agreement|type") > 0 ) continue m := StrSplit(A_LoopField, "|") GuiControl, Text, UserInput%count%, % m[4] count += 1 } ,因为此设置仅允许用户修改其内容,而不是脚本。
我还通过ReadOnly更改了循环的分隔符,这是解析循环的正确行分隔符,但这不会影响您的脚本。


但是,先前的方法假定与GUI控件关联的变量(`r`nUserInput1,...)也存在于第二个脚本中,而则不#include指令都包含在同一主脚本中,或者用手将它们都粘贴到同一文件中,则会发生strong>。

如果出于某种原因(可能不是)使脚本需要并行执行,您仍然可以使用命令ControlSetText来设置第二个脚本中控件的文本语法是:

UserInput2

在您的情况下,您可以在第{N个Edit控件的ControlSetText[, Control, NewText, WinTitle, WinText, ExcludeTitle, ExcludeText] 参数中指定'EditN',并为Control参数的'New GUI Window ahk_class AutoHotkeyGUI'中指定将其他参数保留为空白),这将与您的GUI的窗口和控件匹配(除非存在多个具有相同标题的AutoHotkeyGUI,或者在GUI中的第一个之前存在多个编辑控件)。 [More about the WinTitle parameter]。

使用此命令,您的循环可以重写为:

WinTitle

您当然可以在任何最终使用的标题处替换“ count = 1 Loop, Parse, str, `r`n { If (RegExMatch(A_LoopField,"^\|------|^\| \||Title|Agreement|type") > 0 ) continue m := StrSplit(A_LoopField, "|") ControlSetText, Edit%count%, % m[4], New GUI Window ahk_class AutoHotkeyGUI count += 1 } ”。


另一方面,我强烈建议您考虑采用另一种策略来存储GUI数据,而不要使用那种复杂的标记语法和自定义(但有效;)RegEx。

有许多不同的替代方法可以将脚本的数据存储在单独的文件中,但是非常简单的一种方法是使用Ini File,它可以存储按部分构造的键值信息对,用于哪个AutoHotKey提供内置命令IniReadIniWriteIniDelete