Что нового

Выполнение команд из текстового файла

MockeR

Знающий
Сообщения
101
Репутация
14
Как сделать чтобы AutoIt выполнял команды, которые записаны в текстовом файле?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR
Например, так :smile:
Код:
$aText = StringSplit(StringStripCR(FileRead('test.txt')), @LF)

If $aText[0] Then
	For $i = 1 To $aText[0]
		If StringInStr($aText[$i], 'пожалуйста') Then
			If StringInStr($aText[$i], 'сообщение') Then
				$aMessage = StringRegExp($aText[$i], '"(.*?)"', 3)
				If IsArray($aMessage) Then
					MsgBox(64, 'Строка ' & $i, $aMessage[0])
				EndIf
			EndIf
		Else
			MsgBox(16, 'Строка ' & $i, 'А где волшебное слово?')
		EndIf
	Next
EndIf
В файле test.txt
Код:
Покажи сообщение с текстом "Пробный текст-1"
Покажи, пожалуйста, сообщение с текстом "Пробный текст-1"
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
спасибо, работает :ok:
а если файл test.txt содержит
Код:
MsgBox(0, "Test", "Hello World:)")
Как эту команду выполнить?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR
Код:
$aText = StringSplit(StringStripCR(FileRead('test.txt')), @LF)

If $aText[0] Then
	For $i = 1 To $aText[0]
		Execute($aText[$i])
		If @error Then
			MsgBox(16, 'Error', 'Ошибка в строке ' & $i)
		EndIf
	Next
EndIf

В файле test.txt
Код:
MsgBox(0, "Test", "Hello World:)")
Или так:
Код:
;$aText = StringSplit(StringStripCR(FileRead('test.txt')), @LF)

For $i = 1 To 10
	$iIndex = Random(1, 5, 1)
	;MsgBox(64, $i, $aText[$iIndex])
	MsgBox(64, $i, FileReadLine('test.txt', $iIndex), 1)
Next

В файле test.txt
Код:
Один
Два
Три
Четыре
Пять
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
А если в файле есть разные команды, то как заставить AutoIt их выполнить? :wall_brake:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
MockeR [?]
А если в файле есть разные команды, то как заставить AutoIt их выполнить?
Тебе же показали как:

Код:
$aFuncs = StringSplit(StringStripCR(FileRead('test.txt')), @LF)

For $i = 1 To UBound($aFuncs)-1
    Execute($aFuncs[$i])
Next
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
CreatoR сказал(а):
MockeR [?]
А если в файле есть разные команды, то как заставить AutoIt их выполнить?
Тебе же показали как:

Код:
$aFuncs = StringSplit(StringStripCR(FileRead('test.txt')), @LF)

For $i = 1 To UBound($aFuncs)-1
    Execute($aFuncs[$i])
Next

Это конечно работает, но только для команд которые содержатся только на одной строке.
А если там будет, например,
test.txt
Код:
MsgBox(0, "2", "msg1")
MsgBox(0, "2", "msg2")
For $q = 1 to 5
	MsgBox(0, "Test", $q)
Next
то сдесь выполняются только 2 первых мессагбокса :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR [?]
Это конечно работает, но только для команд которые содержатся только на одной строке.
А если там будет, например,...
А зачем это?
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
madmasles сказал(а):
MockeR [?]
Это конечно работает, но только для команд которые содержатся только на одной строке.
А если там будет, например,...
А зачем это?
просто нужно сделать программу которая будет выполнять все команд из заданого файла!!!


Добавлено:
Сообщение автоматически объединено:

aleratorio сказал(а):
Код:
Run(@AutoItExe & ' test.txt', @ScriptDir)

:smile:
не работает :(
 

aleratorio

Осваивающий
Сообщения
85
Репутация
43
Не знаю, у меня работает. test.txt находится в каталоге со скриптом.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR [?]
просто нужно сделать программу которая будет выполнять все команд из заданого файла!!!
Тогда Вам надо четко определиться в каком виде эти команды будут в файле.
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
madmasles сказал(а):
MockeR [?]
просто нужно сделать программу которая будет выполнять все команд из заданого файла!!!
Тогда Вам надо четко определиться в каком виде эти команды будут в файле.
команды могут быть разные!!! начиная от ClipGet() и заканчивая _WordQuit() :smile:


Добавлено:
Сообщение автоматически объединено:

aleratorio сказал(а):
Не знаю, у меня работает. test.txt находится в каталоге со скриптом.

это работает только со скриптом!!!
с скомпилированной программой @AutoItExe возвращает не путь AutoIt'a, а путь этой же программы(((
 

aleratorio

Осваивающий
Сообщения
85
Репутация
43
Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript test.txt', @ScriptDir)

работает и со скриптом и с exe-шником
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
:shok:ops: вот так действительно работает!!! :thumbs_up:
Спасибо!!! :smoking:

С меня +1 :beer:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Я когда то делал так:

Код:
#include <File.au3>

$sReadIncl = _
	'#NoTrayIcon' & @CRLF & _
	'ConsoleWrite("Return from Line #" & @ScriptLineNumber & ": " & TestFunc("Test"))' & @CRLF & _
	'ConsoleWrite("Return from Line #" & @ScriptLineNumber & ": " & MsgBox(36, "", "Are you sure?"))' & @CRLF & _
	'Func TestFunc($sParam)' & @CRLF & _
	'	Return $sParam' & @CRLF & _
	'EndFunc'

$sRet = _AutoIt3ExecuteCode($sReadIncl)

ConsoleWrite($sRet)

Func _AutoIt3ExecuteCode($sCode)
	Local $sTmpFile = _TempFile(@TempDir, "~AutoIt3ExecuteCode_")
	FileWrite($sTmpFile, $sCode)
	
	Local $iPID = Run(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & $sTmpFile & '"', @WorkingDir, 0, 2)
	Local $sStdOut_Read = "", $sStdOut_Ret = ""
	
	While 1
		$sStdOut_Read = StdoutRead($iPID)
		
		If @error <> 0 Then
			ExitLoop
		EndIf
		
		If $sStdOut_Read <> "" Then
			$sStdOut_Ret &= $sStdOut_Read & @CRLF
		EndIf
		
		Sleep(10)
	WEnd
	
	FileDelete($sTmpFile)
	Return $sStdOut_Ret
EndFunc


Тут естественно вместо содержимого $sReadIncl нужно подставить FileRead("MyFuncs.txt").
 

aleratorio

Осваивающий
Сообщения
85
Репутация
43
Да не за что... Просто если бы вопрос (или название темы) были сформулированы как: "Запуск txt-файла, как au3-скрипта из другого скрипта" - думаю ответили бы сразу...
 
Автор
M

MockeR

Знающий
Сообщения
101
Репутация
14
Creator, Спасибо, это тоже отлично работает!!!
+1 :ok:


Добавлено:
Сообщение автоматически объединено:

aleratorio сказал(а):
Да не за что... Просто если бы вопрос (или название темы) были сформулированы как: "Запуск txt-файла, как au3-скрипта из другого скрипта" - думаю ответили бы сразу...
Ничего)) главное что проблема решена!!! ;D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
MockeR
Не нужно цитировать всё сообщение (тем более включая код), достаточно только тот текст, на который отвечаешь.
 
Верх