1 (изменено: Bobby, 2012-04-24 22:36:14)

Тема: AHK: Parse строки

Имеем

 Str = строка25 11 22 33 44 55 66 77 88 99 12 
Loop, parse, Str, %A_Space%
;можно продолжить 
{
MsgBox, % A_LoopField
If A_Index = 2
a[1] := A_LoopField
If A_Index = 3
b[1] := A_LoopField
If A_Index = 4
a[2] := A_LoopField
If A_Index = 5
b[2] := A_LoopField
If A_Index = 6
a[3] := A_LoopField
If A_Index = 7
b[3] := A_LoopField
If A_Index = 8
a[4] := A_LoopField
If A_Index = 9
b[4] := A_LoopField
If A_Index = 10
a[5] := A_LoopField
If A_Index = 11
b[5] := A_LoopField
}
MsgBox, % a[2] " ," b[2]

Как выбрать из строки значения для переменных a[n] и b[n], чтобы получилось
а[1]=11 b[1]=22
a[2]=33 b[2]=44
a[3]=55 b[3]=66
a[4]=77 b[4]=88
a[5]=99 b[5]=12
Есть ли более компактный вариант кроме описанного?

2 (изменено: Irbis, 2012-04-25 00:40:38)

Re: AHK: Parse строки

; AHK_L 1.1.07.03
a := Object(), b := Object() ; для AHK-basic строка не нужна
Str = строка25 11 22 33 44 55 66 77 88 99 12 
Loop, parse, Str, %A_Space%
   arr := Mod(A_Index,2) ? "b" : "a", %arr%[A_Index//2] := A_LoopField
MsgBox, % a[2] ", " b[2]

3

Re: AHK: Parse строки

Irbis пишет:
a := Object(), b = Object()
...

По-видимому, коллега Bobby пользуется AHK-basic, там в переменных разрешается использовать символы "[" и "]", так что объектов, скорее всего, не нужно.

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

4 (изменено: Irbis, 2012-04-25 00:40:54)

Re: AHK: Parse строки

Видимо. Несколько минут медитировал  на пример, пока не догадался инициализировать объекты. (MsgBox упорно выдавал пустую строку)
Чтож, или мне придется переходить на устаревший вариант AHK, или ....
Не имею возможности проверить работу скрипта на AHK-basic (На всякий случай указал в скрипте используемую версию AHK)

5

Re: AHK: Parse строки

Irbis пишет:

Не имею возможности проверить работу скрипта на AHK-basic (На всякий случай указал в скрипте используемую версию AHK)

На AHK-basic не заработает — там объектов нет, проще от квадратных скобок было избавиться.

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

6

Re: AHK: Parse строки

Но ТС привел пример со скобками, значит рабочий? Пусть убирает первую строку (не комментарий), и работает с a[..] как с переменными, а не объектами.
Или я что-то недопонимаю

7 (изменено: Bobby, 2012-04-25 09:16:45)

Re: AHK: Parse строки

Спасибо! Я не против AHK_L. Так тоже работает:


; AHK_L 1.1.07.03
a := []
b := []
;a := Object(), b := Object() ; для AHK-basic строка не нужна
Str = строка25 11 22 33 44 55 66 77 88 99 12 
Loop, parse, Str, %A_Space%
{
    n += 1
    arr := Mod(A_Index,2) ? "b" : "a", %arr%[A_Index//2] := A_LoopField
}
n := n/2
Loop %n%  ; в нашем случае n = 5
MsgBox, % a[A_Index] ", " b[A_Index]

А как определить количество циклов кроме моего варианта?

8 (изменено: Irbis, 2012-04-25 11:10:35)

Re: AHK: Parse строки

a := [], b := []
Str = строка25 11 22 33 44 55 66 77 88 99 12 
Loop, parse, Str, %A_Space%
   arr := Mod(A_Index,2) ? "b" : "a", %arr%[A_Index//2] := A_LoopField
Loop % a.MaxIndex()
   MsgBox, % a[A_Index] ", " b[A_Index]

9

Re: AHK: Parse строки

Спасибо, Irbis!

10

Re: AHK: Parse строки

Пожалуйста.