Что нового

Переменная имеет неправильное количество индексов

Ksaan

Знающий
Сообщения
207
Репутация
15
Прошу помощи где я ошибся что не так?
Код:
#include <Array.au3>

HotKeySet('{DELETE}', '_Exit') ; 

$sPath = 'd:\cmd.txt';<--- Путь до текстового файла с числами
$sSep = '\' ;<--- Разделитель,
$hFile = FileOpen($sPath, 0);<--- Открываем файл для чтения
$iIND = 1;<--- Индикатор выхода из цикла
While 1;<--- Цикл
 $sLine = FileReadLine($hFile);<--- Считываем файл
 $iIND = @error;<--- Проверяем не конец ли файла
 If $iIND = -1 Then ExitLoop;<--- Если конец, дальще не обратаываем файл
 $aLine = StringSplit($sLine, $sSep);<--- Разделяем строку разделителем
 If $aLine[0] = 1 Then;<--- Проверка на наличие второго числа (отсутствие)
 $iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = 0;<--- Второй параметр
 $iParam3 = 0;<--- Трейтий параметр
 $iParam4 = 0;<--- Четвертый параметр
 Else;<--- Проверка на наличие второго числа (присутствие)
 $iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = $aLine[2];<--- Второй параметр
 $iParam3 = $aLine[3];<--- Трейтий параметр
 $iParam4 = $aLine[4];<--- Четвертый параметр
 EndIf
;~ MsgBox ( 0, $iIND, 'iparam1 = ' & $iParam1 & @CRLF & 'iparam = ' & $iParam2) - через MsgBox все работает как надо
 $X_ar = '1' ;<----  значение в тексте
  $pos1 = MouseGetPos()
$array = StringRegExp($iParam3, $X_ar)  ;<----Ищем  значение в тексте
If ($array = 0) Then ;<---- Если значение равно 
   $aX = $Pos1[0] + $iParam1 ;<----- То выполняет
 ElseIf($array = 1) Then ;<---- Если значение равно
	  $aX = $Pos1[0] - $iParam1 ;<----- То выполняет
  Else
	 Sleep(10)
Endif
$X_ar1 = '1'   ;<---- значение в тексте
 
$array = StringRegExp($iParam4, $X_ar1)  ;<----Ищем  значение в тексте
If ($array = 0) Then ;<---- Если значение равно
   $aY = $Pos1[1] + $iParam2 ;<----- То выполняет
 ElseIf($array = 1) Then ;<---- Если значение равно
	  $aY = $Pos1[1] - $iParam2 ;<----- То выполняет
  Else
	 Sleep(10)
Endif

  
  MouseMove($aX, $aY, 0)
 
 
WEnd



Func _Exit()
  Exit
EndFunc

Выдает ошибку : Переменная Массива имеет неправильное количество индексов или индекс диапазона измерения превышен
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
$iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = $aLine[2];<--- Второй параметр
 $iParam3 = $aLine[3];<--- Трейтий параметр
 $iParam4 = $aLine[4];<--- Четвертый параметр

Тут ошибка. Откуда у вас должно браться 4 параметра? Помню по вашей предыдущей теме - параметра два.

Добавьте условие:
Код:
If $aLine[0] = 4 Then
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
АА я видимо тугодум ..... не понял где условие вставить?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
If $aLine[0] = 1 Then;<--- Проверка на наличие второго числа (отсутствие)
 $iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = 0;<--- Второй параметр
 $iParam3 = 0;<--- Трейтий параметр
 $iParam4 = 0;<--- Четвертый параметр
 Else;<--- Проверка на наличие второго числа (присутствие)
 $iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = $aLine[2];<--- Второй параметр
 $iParam3 = $aLine[3];<--- Трейтий параметр
 $iParam4 = $aLine[4];<--- Четвертый параметр
 EndIf


Просто замените эту конструкцию на:
Код:
For $Idx = 1 To 4 Step 1
	If $Idx <= $aLine[0] Then
		Assign( "iParam" & $Idx, $aLine[$Idx] )
	Else
		Assign( "iParam" & $Idx, 0 )
	EndIf
Next


Или:
Код:
Local $iParam1 = 0, $iParam2 = 0, $iParam3 = 0, $iParam4 = 0
If $aLine[0] > 0 Then $iParam1 = $aLine[1]
If $aLine[0] > 1 Then $iParam2 = $aLine[2]
If $aLine[0] > 2 Then $iParam3 = $aLine[3]
If $aLine[0] > 3 Then $iParam4 = $aLine[4]
 
Верх