Делаю проект под программу построения графиков Gnuplot, думаю это можно сделать и средствами Autoit,
но интересно разобраться именно с надстройкой в виде скрипта для работы с конфигурационным файлом программы.
Задача: На диске есть папка E:\results, в котрую другая программа пишет файлы такого рода 2018_05_22.csv, 2018_05_23.csv...
Пользователь через меню-календарь выбирает число, программа записывает его как год_месяц_число в 13-ю строчку файла начиная с 18 символа.
При каждом таком действии пользователя, если выбрано иное число нужно перезаписывать эти данные в файле.
Содержание файла:
Расширение файла .plt
Мне пока удалось сделать упрощенный пример через FileWrite, естественно только в 1-ю строку файла, а запись в файл по нажатию горячей клавиши.
Подскажите как это можно реализовать через _FileWriteToLine как описано в задаче.
Хотел сам написать необходимую программу, но из-за неполного понимания концепции построения программы прошу помощи в разъяснении некоторых нижеописанных ситуаций.
но интересно разобраться именно с надстройкой в виде скрипта для работы с конфигурационным файлом программы.
Задача: На диске есть папка E:\results, в котрую другая программа пишет файлы такого рода 2018_05_22.csv, 2018_05_23.csv...
Пользователь через меню-календарь выбирает число, программа записывает его как год_месяц_число в 13-ю строчку файла начиная с 18 символа.
При каждом таком действии пользователя, если выбрано иное число нужно перезаписывать эти данные в файле.
Содержание файла:
set yrange [0:150]
set title "Сливки"
set border 3
set xtics nomirror
set ytics nomirror
set ata time
set timefmt '%H:%M'
set datafile separator ';'
set xlabel "Время"
set ylabel "Температура"
set grid
unset key
plot 'E:\results\2018_05_22_.csv' using 1:2 smooth bezier linecolor -1 linewidth 2
set title "Сливки"
set border 3
set xtics nomirror
set ytics nomirror
set ata time
set timefmt '%H:%M'
set datafile separator ';'
set xlabel "Время"
set ylabel "Температура"
set grid
unset key
plot 'E:\results\2018_05_22_.csv' using 1:2 smooth bezier linecolor -1 linewidth 2
Мне пока удалось сделать упрощенный пример через FileWrite, естественно только в 1-ю строку файла, а запись в файл по нажатию горячей клавиши.
Подскажите как это можно реализовать через _FileWriteToLine как описано в задаче.
Код:
#include <GUIConstantsEx.au3>
#include <Date.au3>
#include <File.au3>
Dim $date1, $msg, $dd1, $hGUI, $file
$file = FileOpen("test.txt", 1)
$hGUI = GUICreate ( "Установите дату", 450, 254)
$date1 = GUICtrlCreateDate(@MDAY & '\' & @MON & '\' & @YEAR, 20, 32, 100, 20, 0x00) ;Создает строку
с выбором даты
GUISetState()
HotKeySet("a", "_func1")
Func _func1()
_FileWriteToLine($file, 3, $dd1, 1)
;FileWrite($file, $dd1)
EndFunc
While 1
Sleep(10)
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
$dd1 = String(GUICtrlRead($date1, 1))
WEnd
Хотел сам написать необходимую программу, но из-за неполного понимания концепции построения программы прошу помощи в разъяснении некоторых нижеописанных ситуаций.
Если выражение
вытянуть из цикла While в основное тело программы,
- функция GUICtrlRead забирает данные из переменной $dd1 только один раз. т.е. прошла инициализация и дальше нужно снова перезапускать программу.
В то же время GUICtrlCreateDate находится тут же рядом и тоже за пределами цикла, но остается активной, позволяет работать с данными в меню-календаре.
Как я это понимаю для нее достаточно просто инициализации, из-за того что - эта функция входит в состав GUI-библиотеки, и она своим кодом запускает стандартный встроенный в винду системный процесс рисуя окно, чекбокс, и пользователь уже с ним работает.
Выражение
нормально считывает и обновляет данные из переменной $dd1. Это получается из-за того что оно находится в функции Func ... EndFunc?
Но она ведь сама не в цикле...
Получается все что находится внутри функции обновляет свои данные? Но почему тогда не работает на этом же самом месте
Во всех вышеописанных случаях компилятор не выдает ошибок и программа работает по разному. Может это конечно фича а не баг, но как мне понять что я правильно установил выражение в нужную позицию программы. Идет ли обновление переменных в теле функции или еще где то такой нюанс может быть.
Есть ли какой-то общепринятый устоявшийся стиль,- система по которой нужно построить программу.
В справке в основном описание функций, их опций и синтаксиса.
На форуме нашел один пример, так же применяется _FileWriteToLine. Но у меня не получается по нему.
Чтобы понять про что я хочу спросить, опишу на примере упрощенного Си-подобного языка Ардуино.
В нем конкретно написан краткий принцип действия программы:
Функция setup() запускается при старте программы. Она инициализирует и устанавливает первоначальные значения, вызывается только один раз.
После вызова setup(), функция loop() крутится в цикле, позволяя программе совершать вычисления и реагировать на них.
Все написанные функции нужно объявить в loop чтобы он их дергал.
Ткните где можно почитать, мне бейсик для написания в Autoit нужно более менее хорошо знать? а то вопросов наслоилось много
Код:
$dd1 = String(GUICtrlRead($date1, 1))
- функция GUICtrlRead забирает данные из переменной $dd1 только один раз. т.е. прошла инициализация и дальше нужно снова перезапускать программу.
В то же время GUICtrlCreateDate находится тут же рядом и тоже за пределами цикла, но остается активной, позволяет работать с данными в меню-календаре.
Как я это понимаю для нее достаточно просто инициализации, из-за того что - эта функция входит в состав GUI-библиотеки, и она своим кодом запускает стандартный встроенный в винду системный процесс рисуя окно, чекбокс, и пользователь уже с ним работает.
Выражение
Код:
FileWrite($file, $dd1)
Но она ведь сама не в цикле...
Получается все что находится внутри функции обновляет свои данные? Но почему тогда не работает на этом же самом месте
Код:
_FileWriteToLine($file, 3, $dd1, 1)?
Во всех вышеописанных случаях компилятор не выдает ошибок и программа работает по разному. Может это конечно фича а не баг, но как мне понять что я правильно установил выражение в нужную позицию программы. Идет ли обновление переменных в теле функции или еще где то такой нюанс может быть.
Есть ли какой-то общепринятый устоявшийся стиль,- система по которой нужно построить программу.
В справке в основном описание функций, их опций и синтаксиса.
На форуме нашел один пример, так же применяется _FileWriteToLine. Но у меня не получается по нему.
Чтобы понять про что я хочу спросить, опишу на примере упрощенного Си-подобного языка Ардуино.
В нем конкретно написан краткий принцип действия программы:
Функция setup() запускается при старте программы. Она инициализирует и устанавливает первоначальные значения, вызывается только один раз.
После вызова setup(), функция loop() крутится в цикле, позволяя программе совершать вычисления и реагировать на них.
Все написанные функции нужно объявить в loop чтобы он их дергал.
Ткните где можно почитать, мне бейсик для написания в Autoit нужно более менее хорошо знать? а то вопросов наслоилось много