Что нового

[Массивы] Ошибки обработки 2мерных массивов?

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Подскажите есть ли способы обработки 2мерного массива как двух 1мерных
В общем есть два 1мерных массива хотелось бы переделать их на один 2 мерный но функции _ArrayAdd() _ArrayInsert() не позволяют этого делать с 2мерными массивами
Вот как пример разные кусочки из кода с $DT1 и $DT2 хотелось бы сделать из них общий 2мерный $DT но дальнейшая его обработка с _ArrayAdd() _ArrayInsert() не позволяет объединить
Код:
Func ArryZap()   ;Записывает в .txt массивы
	$File=FileOpen('МайнингМассивы.txt',2)
		FileWrite($File,_ArrayToString($DT1,',')&@CRLF);1-ая строка в txt
		FileWrite($File,_ArrayToString($DT2,','))  ;2-ая сторка в txt
        FileClose($File)
EndFunc
;======================================================
$File=FileOpen('МайнингМассивы.txt')
	Global $DT1=StringSplit(FileReadLine($File,1),',',2);Массив векторов
	If @error Then
		MsgBox(0,'','Ошибка создаю массивы $DT1,$DT2')
		Global $DT1[1]
		Global $DT2[1]
	EndIf
	Global $DT2=StringSplit(FileReadLine($File,2),',',2);Массив действий по векторам
FileClose($File)
;======================================================
Do
Until _IsPressed('0D')
For $i=1 To UBound($DT1)-1
	If $DT2[$i]=$Dn[$n] Then
		_ArrayAdd($VektoriObu4,$DT1[$i])
	EndIf
Next
;======================================================
$num=_ArraySearch($DT1, $var_string, 0, 0, 0, 1);Ищем в майнинг массиве номер вектора датчиков
		If @error Then;Если нет такого вектора добавляем его к массиву
				_ArrayAdd($DT1,$var_string)
				_ArrayAdd($DT2,'')
				$num=0
		ElseIf $var_star<>$var_string Then ;Если состояние вектора изменилось заносим в ЛОГ
				_4tenie($var);Отображает реакцию датчиков если изменилсь
				$File=FileOpen('Log.txt',1)
					FileWrite($File,@HOUR&':'&@MIN&'   '&$DT2[$num]&'   '&$var_string&@CRLF)
				FileClose($File)
				$var_star=$var_string
		EndIf
;======================================================
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Re: [Массивы] Способы обработки 2мерных массивов?

Да в описании функций есть работа с 2Д массивами но у меня почему то именно с 2Д выдаёт ошибку что "массив ранее не объявлен"
Хотя он объявляется в самом начале скрипта
А вот с 1D эти функции работают как положено
Может есть какие подводные камни в объявлении 2D массивов?
Вообще через
Код:
Global $DT[50][2]

правильно объявлять массивы?
Кстати в справке к _ArrayAdd смущает вот это описание выдаваемых ошибок Ошибка 2 (не является одномерным массивом)
Возвращаемое значение
Успех: Возвращает индекс последней добавленной ячейки
Ошибка: Возвращает -1, устанавливает @error
@error: 1 - $avArray не является массивом
2 - $avArray не является одномерным массивом
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Re: [Массивы] Способы обработки 2мерных массивов?

RavdonikaS, 3.3.14.3 Fixes ставили?

У меня таких ошибок не наблюдается например в таком варианте
Код:
#include <Array.au3>
Global $aArray[2][2]

_ArrayDisplay($aArray, "До")
_ArrayAdd($aArray, "3|3")
_ArrayAdd($aArray, 4)
_ArrayDisplay($aArray, "После")
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Re: [Массивы] Способы обработки 2мерных массивов?

Не ставил Что бывает неправильная работа с массивами в обычной версии AutoIt?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Re: [Массивы] Способы обработки 2мерных массивов?

RavdonikaS, это хотфикс для обычной версии 3.3.14.3
 
Автор
RavdonikaS

RavdonikaS

Новичок
Сообщения
68
Репутация
4
Re: [Массивы] Способы обработки 2мерных массивов?

Спасибо добрый человек помог!!! Всё заработало начало добавлять новые элементы
До фиксов даже в вашем примере выдавало "не объявленную переменную"
Потом поставил эти фиксы на 3.3.14.2 отдельно в вашем примере работало а когда вставлял в свой код опять же писало что "переменная ранее не объявлена"
Потом нашел 3.3.14.3 версию поставил на неё фиксы и тут уже заработало как надо во всех случаях
Тему переименовал на "Ошибки" потому что это была ошибка AutoIt
 
Верх