Захотелось автоматизировать выполнение некоторых задач. Через поисковик искал, как автоматизировать действия и узнал про AutoIt...
Если кратко, мне приходят данные в двух файлах, нужно немного над ними поколдовать, а потом отправлять команды ко внутренней служебной программе, которая работает в командной строке. Последнее я решил попробовать автоматизировать. Но дальше рисования интерфейса дело особо не пошло.
Итак, суть. Есть две таблицы (ListView) по две колонки в каждой. В них я загружаю данные из двух разных текстовых файлов с помощью 2 кнопок (Button1 и Button2). По нажатию на третью кнопку (Button3) должно происходить следующее: берем одно значение из первой таблицы и проходимся по всем значениям второй таблицы сверху вниз три раза (выполнять одну и ту же команду к командной строке три раза подряд нельзя, поэтому нужно именно пройтись сверху вниз три раза), отправляя команды в командную строку с задержкой между каждой отправкой, чтобы предыдущий запрос успел успешно отработать. Затем берём второй ряд значений из первой таблицы и снова три раза проходимся по всем значениям второй таблицы. И так, пока все операции не будут выполнены.
И ещё... RunWait на роль паузы не подойдёт, консоль после ввода команды не закрывается.
Вот так примерно это можно представить (на примере тестовых данных, которые я поместил ниже, в спойлерах):
Надеюсь смысл понятен. Однако я так и не смог подступиться к этой задаче.
AutoIt код
Пример данных 1 файла (тестовые данные):
Пример данных 2 файла (тестовые данные):
Просите за столь сумбурное и спутанное описание. Если несложно, помогите чайнику, пожалуйста.
Если кратко, мне приходят данные в двух файлах, нужно немного над ними поколдовать, а потом отправлять команды ко внутренней служебной программе, которая работает в командной строке. Последнее я решил попробовать автоматизировать. Но дальше рисования интерфейса дело особо не пошло.
Итак, суть. Есть две таблицы (ListView) по две колонки в каждой. В них я загружаю данные из двух разных текстовых файлов с помощью 2 кнопок (Button1 и Button2). По нажатию на третью кнопку (Button3) должно происходить следующее: берем одно значение из первой таблицы и проходимся по всем значениям второй таблицы сверху вниз три раза (выполнять одну и ту же команду к командной строке три раза подряд нельзя, поэтому нужно именно пройтись сверху вниз три раза), отправляя команды в командную строку с задержкой между каждой отправкой, чтобы предыдущий запрос успел успешно отработать. Затем берём второй ряд значений из первой таблицы и снова три раза проходимся по всем значениям второй таблицы. И так, пока все операции не будут выполнены.
И ещё... RunWait на роль паузы не подойдёт, консоль после ввода команды не закрывается.
Вот так примерно это можно представить (на примере тестовых данных, которые я поместил ниже, в спойлерах):
Код:
Начало работы
sdmprof.exe -zapros1 -10000 -index1 -data1 ; Команда 1
Пауза 50 секунд
sdmprof.exe -zapros1 -10000 -index2 -data2 ; Команда 2
Пауза 50 секунд
...
sdmprof.exe -zapros1 -10000 -index1 -data1 ; Команда N (идентична первой). 3 проход
Пауза 50 секунд
sdmprof.exe -zapros1 -10000 -index2 -data2 ; Команда N (идентичная второй). 3 проход
Пауза 50 секунд
...
sdmprof.exe -zapros8 -8000 -index10 -data10 ; Предпоследняя команда
Пауза 50 секунд
sdmprof.exe -zapros8 -8000 -index11 -data11 ; Последняя команда
Пауза 50 секунд
Завершение работы
Надеюсь смысл понятен. Однако я так и не смог подступиться к этой задаче.
AutoIt код
Код:
#include <MsgBoxConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <File.au3>
; Загружаем данные в первую таблицу
Func Load1()
Dim $array
$fo1 = FileOpenDialog("Выбери файл 1", @ScriptDir, "Текстовый документ (*.txt)")
_FileReadToArray($fo1, $array)
For $i = 1 To $array[0]
GUICtrlCreateListViewItem($array[$i], $ListView1)
Next
EndFunc
; Загружаем данные во вторую таблицу
Func Load2()
Dim $arr
$fo2 = FileOpenDialog("Выбери файл 2", @ScriptDir, "Текстовый документ (*.txt)")
_FileReadToArray($fo2, $arr)
For $j = 1 To $arr[0]
GUICtrlCreateListViewItem($arr[$j], $ListView2)
Next
EndFunc
$Form1 = GUICreate("Автоматические расчёты данных", 569, 536, 238, 128)
$Group1 = GUICtrlCreateGroup("", 10, 8, 265, 441)
$Button1 = GUICtrlCreateButton("Загрузить Данные 1...", 16, 24, 250, 33)
$ListView1 = GUICtrlCreateListView("||", 16, 72, 250, 358)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 123)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 123)
$Group2 = GUICtrlCreateGroup("", 288, 8, 266, 441, BitOR($GUI_SS_DEFAULT_GROUP,$BS_CENTER))
$Button2 = GUICtrlCreateButton("Загрузить Данные 2...", 296, 24, 250, 33)
$ListView2 = GUICtrlCreateListView("||", 296, 72, 250, 360)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 123)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 123)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button3 = GUICtrlCreateButton("Запустить отправку запросов в программу", 8, 456, 545, 65)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Load1()
Case $Button2
Load2()
EndSwitch
WEnd
Код:
zapros1|10000
zapros2|20000
zapros3|300
zapros4|4000
zapros5|50
zapros6|60000
zapros7|700
zapros8|8000
Пример данных 2 файла (тестовые данные):
Код:
index1|data1
index2|data2
index3|data3
index4|data4
index5|data5
index6|data6
index7|data7
index8|data8
index9|data9
index10|data10
index11|data11
Просите за столь сумбурное и спутанное описание. Если несложно, помогите чайнику, пожалуйста.