Переменные выражения autohotkey для псевдо-массивов - Преобразовать строку в число? - PullRequest
1 голос
/ 29 мая 2019

Этот вопрос был дан ответ внизу этого сообщения.

Я просмотрел 6 различных веб-страниц форумов AHK, задающих этот вопрос, и еще одну на SO здесь:

Строка в число с помощью 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: =% values32% - = 0.10 ", поэтому я пытаюсь: * * 1018

; 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

Таким образом, он просто отображает формулу в виде текстовой строки, фактически он не выполняет вычисления.

Мысли? Спасибо!

UPDATE Чтобы продолжить работу над этим решением, вот мой полный код до той части, с которой у меня возникла проблема, а также скриншоты происходящего:

; 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 Ответ

1 голос
/ 29 мая 2019

Вы на правильном пути.Но, согласно моему комментарию, примечание := подразумевает выражения, включающие переменные выражения (следовательно, не окружающие %):

; 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...