此问题的答案已在本文的底部。
我在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
; 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%.
答案 感谢下面的贡献者,我们发现这里有一个“。”从第一个MsgBox弄乱了SLPrice变量,所以我们将SLPrice变量更新为:
SLPrice := SubStr(Trim(prices32), 1, 5) - 0.10 ; to pull the left 5 characters
谢谢!
答案 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提取前几个字符。