1 (изменено: Barrel Tittor, 2019-12-11 17:31:58)

Тема: AHK: Заполнение двумерного массива через функцию, вывод первого.

Добрый день!
Начал работать с многомерными массивами недавно, очень сложно разобраться. Ниже представлен код, в нем функция заполняет массив(двумерный) через парсинг и выводит его путем глобализации.
Проблема состоит в том, что почему-то, заполняется только последний элемент(последний подмассив), никак не могу найти ошибку, помогите пожалуйста!

Example := "moveR 5 6`n`nMoveR 3 4"

GetMacrosScript(MacrosScript)
{
	Loop, Parse, % MacrosScript, % "`n`r"
	{
		CommandTemp := A_LoopField
		StringIndex += 1
		MsgBox, % StringIndex
		global MacrosAr:=[]
		if CommandTemp contains MoveR
		{
			Erri := 0
			Loop, Parse, % CommandTemp, % " "
			{
				if (A_Index = 2+Erri)
				{
					if (A_LoopField <> "") and (A_LoopField <> "MoveR")
						MoveX := A_LoopField
					else
						Erri+=1
				}
				if (A_Index = 3+Erri)
				{
					if (A_LoopField <> "") and (A_LoopField <> "MoveR")
					{
						MoveY := A_LoopField
						break
					}
					else
						Erri+=1
				}
			}
			MacrosAr[StringIndex] := ["MoveR", MoveX, MoveY]
		}
	}
}

GetMacrosScript(Example)
for index, element in MacrosAr
{
	MsgBox, % "Строка номер: " index ", Команда: " MacrosAr[index][1] ", Параметр 1: " MacrosAr[index][2] ", Параметр 2: " MacrosAr[index][3]
}

MsgBox выводит только 2 элемент основного массива и соответственно его подмассив, очень мало информации на AHK-Wiki по этой теме и здесь на форуме тоже особо ничего не нашел(.

2

Re: AHK: Заполнение двумерного массива через функцию, вывод первого.

Barrel Tittor пишет:

очень сложно разобраться

Также сложно разобраться в вашем коде. Вот простой пример заполнения двумерного массива, делайте по образцу:

text =
(
a b c d
e f g h
i j k l
m n o p
)

arr := CreateArray(text)
for k, v in arr
   MsgBox, % v[1] " " v[2] " " v[3] " " v[4]

CreateArray(text) {
   arr := []
   Loop, parse, text, `n, `r
      arr[A_Index] := StrSplit(A_LoopField, " ")
   Return arr
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Заполнение двумерного массива через функцию, вывод первого.

Barrel Tittor пишет:

global MacrosAr:=[]

Вы в цикле каждый раз обнуляете массив.

4

Re: AHK: Заполнение двумерного массива через функцию, вывод первого.

Phoenixxx_Czar
Спасибо большое, думал что таким образом только глобализуется массив, впредь буду внимательнее!