伪数组的自动热键变量表达式-将字符串转换为数字?

时间:2019-05-29 17:10:51

标签: arrays variables macros autohotkey

此问题的答案已在本文的底部。

我在AHK论坛上浏览了6个不同的网页,询问了这个问题,另外一个在这里:

String to Number using autohotkey

...但是他们都没有为我工作。我只是想从StringSplit函数获取的字符串中减去一个数字。这是我的代码:

; Assign entry price variable. 
StringSplit, prices, Window1Text, `n
MsgBox, Your entry price is %prices32%.

; Assign Stop Loss variable
SLPrice := %prices32% -= 0.10
MsgBox, Your SLPrice is %SLPrice%.

我在“ SLPrice:=%prices32%-= 0.10 ”行上收到错误“ 以下变量名称包含非法字符”,因此我尝试:

; Assign entry price variable. 
StringSplit, prices, Window1Text, `n
MsgBox, Your entry price is %prices32%.

; Assign Stop Loss variable
SLPrice = %prices32% - 0.10
MsgBox, Your SLPrice is %SLPrice%.

...我得到的输出:

Your SLPrice is 7.450 - 0.10

因此它只是将公式显示为文本字符串,实际上并没有进行计算。

有什么想法吗?谢谢!

更新 为了继续制定此解决方案,这里是我遇到问题的全部代码,以及发生情况的屏幕截图:

; Get the latest window text to parse values from it
WinGetText, Window1Text, ahk_class WindowsForms10.Window.8.app.0.f96fc5_r9_ad1
MsgBox, The text is: %Window1Text% ; Displays the window get text values
Sleep, 5

winGetText Results

; Assign entry price variable.
StringSplit, prices, Window1Text, `n
MsgBox, Your entry price is %prices32%.

Entry Price MsgBox

; Assign Stop Loss variable
SLPrice := prices32 - 0.10
MsgBox, Your SLPrice is %SLPrice%.

Blank Stop Loss MsgBox

答案 感谢下面的贡献者,我们发现这里有一个“。”从第一个MsgBox弄乱了SLPrice变量,所以我们将SLPrice变量更新为:

SLPrice := SubStr(Trim(prices32), 1, 5) - 0.10 ; to pull the left 5 characters

谢谢!

1 个答案:

答案 0 :(得分:1)

您处在正确的轨道上。但是,根据我的评论,注释:=暗含了包括变量表达式在内的表达式(因此没有包围%的表达式):

; Assign entry price variable. 
StringSplit, prices, Window1Text, `n
MsgBox, Your entry price is %prices32%.

; Assign Stop Loss variable
; Note, the 32 line also includes non printing characters
; so must be trimmed and then we take the left 5 characters
SLPrice := SubStr(Trim(prices32), 1, 5) - 0.10
MsgBox, Your SLPrice is %SLPrice%.

应该这样做。 。

请注意,使用something := %myvariable%意味着读取名为myvariable的变量的内容,并将这些内容用作变量名。因此,如果myvariable是“测试”,那么您实际上是在说something := test(其中某些内容最终等于test变量的内容)。

Hth

根据下面的内容进行编辑,这是一个有效的示例(每条注释,请参阅下文,也请参见下面):

Window1Text =
(
25
26
27
28
)

; Assign entry price variable. 
StringSplit, prices, Window1Text, `n
MsgBox, Your entry price is %prices2%.  ;  using only 2nd line (26)

; Assign Stop Loss variable
SLPrice := prices2 - 0.10  ;  again, changed to 2nd line
MsgBox, Your SLPrice is %SLPrice%.  ;  25.900000
clipboard := SLPrice

HTH,

进一步编辑:因为这真的很酷,并且说明了几个概念与伪数组变量表达式之间的关系:

Window1Text =
(
25
26
27
28
)

; Assign entry price variable. 
StringSplit, prices, Window1Text, `n  ;  (prices0 is the number of entries)
InputBox, num,, % "Pick an array number from 1 to " prices0  ;  get the array number
; note the variable expression includes the num variable contents
MsgBox, % "Your entry price is " Trim(prices%num%) "."  ;  depends on array number

; Assign Stop Loss variable
SLPrice := Trim(prices%num%) - 0.10  ;  uses the array number value
MsgBox, Your SLPrice is %SLPrice%.  ;  so depends on the array number
clipboard := SLPrice

对吗?

但是请注意,这些测试人员可以轻松地工作。 OP中的实际示例是复制文本,第32行包含Trim(x)处理的非打印字符,并仅用SubStr(x,1,5)从Left提取前几个字符。