1 (изменено: emmetoya, 2015-01-19 19:10:38)

Тема: AHK: Получить значение переменной в цикле

Вопрос наверное несложный, однако ответа не нашел.
Простой пример для описания: нужно вывести значение переменных в MsgBox (File, ToolTip не важно) без использования промежуточной локальной переменной

!z::
    a11 := 110
    a12 := 120
    a13 := 130    
    a14 := 140    
    a15 := 150        
    
    loop, 5
        {
            MsgBox,  Значение a1%A_INDEX% = <вопрос>
        } 
return

MsgBox,  Значение a1%A_INDEX% = a1%A_INDEX% выводит просто a11 a12 a13 a14 a15
MsgBox,  Значение a1%A_INDEX% = %a1%A_INDEX%% - ошибка
MsgBox,  Значение a1%A_INDEX% = % a1%A_INDEX% - ошибка
MsgBox %  Значение a1%A_INDEX% = . a1%A_INDEX% . - ошибка
MsgBox,  Значение a1%A_INDEX% = . a1%A_INDEX% . выводит . a11. .a12.  и т.д.

Есть какой-то другой вариант, кроме

    loop, 5
        {
            tmp := a1%A_INDEX%
            MsgBox,  Значение a1%A_INDEX% = %tmp%
        } 

Можно ли получить значение переменных, например, в двух вложенных циклах через %A_INDEX% ?

    loop, 2
        {
            loop, 10
                {
                    MsgBox,  Значение a%A_INDEX%%A_INDEX% = %a%A_INDEX%%A_INDEX%% 
                    ; пишу сознательно с ошибкой, чтобы пояснить суть
                }
        }

AHK 1.1.16.04

2 (изменено: YMP, 2015-01-19 19:08:44)

Re: AHK: Получить значение переменной в цикле


!z::
    a11 := 110
    a12 := 120
    a13 := 130    
    a14 := 140    
    a15 := 150        
    
    loop, 5
        {
            MsgBox, % "Значение a1" A_INDEX " = " a1%A_Index%
        } 
return

A_Index только в своём цикле работает.

3

Re: AHK: Получить значение переменной в цикле

YMP, ты видишь, что пост неправильно оформлен?
emmetoya, ознакомьтесь с этой темой, отредактируйте свой пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Получить значение переменной в цикле

YMP пишет:

!z::
    a11 := 110
    a12 := 120
    a13 := 130    
    a14 := 140    
    a15 := 150        
    
    loop, 5
        {
            MsgBox, % "Значение a1" A_INDEX " = " a1%A_Index%
        } 
return

A_Index только в своём цикле работает.

Спасибо за подсказку! Мне не встречалась такая форма записи.

p.s. приношу извинения, заработался и забыл совсем про тег code

5

Re: AHK: Получить значение переменной в цикле

teadrinker пишет:

YMP, ты видишь, что пост неправильно оформлен?

Вижу, но ведь отвечать на такие посты не запрещено правилами. Мы это уже обсуждали.

6

Re: AHK: Получить значение переменной в цикле

А зачем это делать? Не совсем тебя понимаю. Трудно подождать, пока пост будет оформлен нормально?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Получить значение переменной в цикле

Нет ничего хуже, чем ждать и догонять. (с)
Я обычно и не отвечаю, но в этот раз как-то не придал значения. Наверно, шестым чувством или третьим глазом видел, что автор исправит после твоего замечания.

8

Re: AHK: Получить значение переменной в цикле

Какая-то путаница с синтаксисом, если подскажете или направите на статью буду благодарен))

Например, вызываю функцию с двумя аргументами getFileFromFTP(fileName, pathToCopyFile): 
Файл нужно скопировать с ftp в папку A_ScriptDir\Tools\

В итоге строка выглядит так:

getfileFromFTP("7za.exe", "" . A_ScriptDir . "\Tools\" . filename . "")

Встроенная переменная передается таким образом: . A_ScriptDir .
Проценты и прочие варианты вызывают ошибку.

Другой случай - запускаем архиватор:

RunWait, "%A_ScriptDir%\Tools\7za.exe" a -tzip -ssw -r0 -mx0 -mmt C:\Temp.zip %A_ScriptDir%\Temp\

Тут уже используется %A_ScriptDir%, вариант с точками не проходит (хотя по идее я формирую строку и вставляю в разрыв значение переменной, как в первом примере)

Третий вариант, цикл с условием:

while A_INDEX <4
 {
     getfileFromFTP("7za.exe", "" . A_ScriptDir . "\Tools\" . filename . "")
     Sleep, 2000
     IfExist, %A_ScriptDir%\Tools\7za.exe
         MsgBox, Success!
   }

Вообще без каких-либо префиксов/постфиксов используем A_INDEX. С %% условие не выполняется, хотя по смыслу я сравниваю значение A_INDEX с 4?

В каких случаях используется %%, в каких " . ", в каких без знаков?

9 (изменено: Alectric, 2015-02-05 21:31:53)

Re: AHK: Получить значение переменной в цикле

Почитай тут, уже было такое.

В каких случаях используется %%, в каких " . ", в каких без знаков?

В случаях если функция принимает "выражение" (смотри в справке кто что принимает) знаки %% не нужны, а " . " используется чтобы ввести простой текст между переменными.

getfileFromFTP("7za.exe", A_ScriptDir . "\Tools\" . filename )

В функцию отправляется:
текст 7za.exe - функция получает его без кавычек
содержимое переменной A_ScriptDir, объединенное с текстом \Tools\ и объединенное с содержимым filename.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

10

Re: AHK: Получить значение переменной в цикле

Как в FileAppend провернуть такой же прием без использования промежуточной переменной?

!d::
    Global downTimeM1Pr1 = 800
    a := 1
    b := 1
    FileDelete, C:\%A_YYYY%%A_MM%%A_DD%.txt
    time_tmp := downTimeM%a%Pr%b%
    FileAppend, %A_YYYY%%A_MM%%A_DD%_%A_Hour%:%A_Min%:%A_Sec%        Downtime time of M%a%Pr%b%  = %time_tmp% msec`n, C:\%A_YYYY%%A_MM%%A_DD%.txt

    FileAppend, %A_YYYY%%A_MM%%A_DD%_%A_Hour%:%A_Min%:%A_Sec%        Downtime of M%a%Pr%b%  = downTimeM%a%Pr%b% `n, C:\%A_YYYY%%A_MM%%A_DD%.txt
    MsgBox, % "Downtime time M" a "Pr" b  "= "   DownTimeM%a%Pr%b% sec
    Run, C:\%A_YYYY%%A_MM%%A_DD%.txt
return

Если использовать такой код, выдает ошибку:

FileAppend, %A_YYYY%%A_MM%%A_DD%_%A_Hour%:%A_Min%:%A_Sec%        % "Downtime time M" a "Pr" b  "= "   DownTimeM%a%Pr%b% sec `n, C:\%A_YYYY%%A_MM%%A_DD%.txt

Перебрал уже 5-6 разных вариантов с " . " " % ", в файл пишется или строка с этими символами, или вообще ошибки вылетают.

11

Re: AHK: Получить значение переменной в цикле

FileAppend, % A_YYYY A_MM A_DD "_" A_Hour ":" A_Min ":" A_Sec "        Downtime of M" a "Pr" b "  = " downTimeM%a%Pr%b% " `n", C:\%A_YYYY%%A_MM%%A_DD%.txt

12

Re: AHK: Получить значение переменной в цикле

Malcev, огромное спасибо!!! Не учел, что знак % в самом начале строки

%A_YYYY%%A_MM%%A_DD%_%A_Hour%:%A_Min%:%A_Sec%

уже решает.