Что нового

Обработка и использование информации из текстового файла

Ksaan

Знающий
Сообщения
207
Репутация
15
В общем суть вот в чём, как то делал макрос на мышь для шутеров и вроде всё работает как надо :-\ НО в скомпилированном скрипте оси уже не поменяешь, решил сделать вот так.
Код:
$sPath = 'd:\cmd.txt';<--- Путь до текстового файла с числами
$sSep = '/' ;<--- Разделитель,
$sAppPath = 'c:\1.exe';<--- Путь до программы для запуска с ключамиp
$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;<--- Второй параметр
 Else;<--- Проверка на наличие второго числа (присутствие)
 $iParam1 = $aLine[1];<--- Первый параметр
 $iParam2 = $aLine[2];<--- Второй параметр
 EndIf
;~ MsgBox ( 0, $iIND, 'iparam1 = ' & $iParam1 & @CRLF & 'iparam = ' & $iParam2) - через MsgBox все работает как надо
 
 While 1
 If Not $Paused Then
 
 Send('{з down}')
 $pos = MouseGetPos()
 Sleep(98)
 If $Paused Then
 Send('{з up}')
 ContinueLoop
 EndIf
 $pos1 = MouseGetPos()
 MouseMove($pos1[0] - $iParam1 , $pos1[1] + $iParam2, 0)
 Sleep(98)
 If $Paused Then
 Send('{з up}')
 ContinueLoop
 EndIf
 $pos2 = MouseGetPos()
 MouseMove($pos2[0] + $iParam1 , $pos2[1] + $iParam2, 0)
 Sleep(98)
 If $Paused Then
 Send('{з up}')
 ContinueLoop
 EndIf
 $pos3 = MouseGetPos()
 MouseMove($pos3[0] - $iParam1 , $pos3[1] + $iParam2, 0)
 Sleep(98)
 If $Paused Then
 Send('{з up}')
 ContinueLoop
 EndIf
 $pos4 = MouseGetPos()
 MouseMove($pos4[0] + $iParam1 , $pos4[1] + $iParam2, 0)
 Sleep(98)
 If $Paused Then
 Send('{з up}')
 ContinueLoop
 EndIf
 
 Else
 Sleep(1)
 EndIf
WEnd
 
WEnd

а вот сам cmd.txt
Код:
80/10
30/24
10/30
32/14
И вот тут я встал в ступор :stars: почему он всё время берёт только первое значение? Через MsgBox всё идет как надо :wall_brake:
Как сделать чтобы он при каждом новом MouseMove брал новые значение из строки ниже??
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Ksaan
Вы кажется немного не так представляете работу вложенного цикла, я попробую объяснить:

Код:
While 1
	;Действие 1
	While 1
		;Действие 2
	WEnd
WEnd


Код:
<<Действие 1
<<Действие 2
<<Действие 2
<<Действие 2
<<Действие 2
....
<<Действие 2

Вот что и происходит у вас. Первую строку обработали - на ней и остались. Сделайте условный выход (ExitLoop) из вложенного цикла, что бы продолжить основной.

Либо считайте файл в 2D массив и работайте уже в отдельном цикле с ним.
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Вот пример создания массива:
Код:
$sPath = 'd:\cmd.txt';<--- Путь до текстового файла с числами
$sSep = '/' ;<--- Разделитель,
$sLine = FileRead($hFile);<--- Считываем файл
$aLine = StringSplit($sLine, Chr(13), 1)

Dim $aCmd[2][$aLine[0]]

For $i = 1 To $aLine[0]
    $s = StringSplit($aLine[$i], $sSep, 1)
	$aCmd[0][$i - 1] = $s[1]
	$aCmd[1][$i - 1] = $s[2]
Next 
_ArrayDisplay($aCmd)
далее используешь в своих целях массив $aCmd
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
А я всё уже разобрался сам просто разбил все циклы по функциям, да и работать с ними проще. :IL_AutoIt_1:
 
Верх