Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скрипт создания файла данных через диологовое окно. как?

Ответить
Настройки темы
[решено] Скрипт создания файла данных через диологовое окно. как?

Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Помогите создать скрипт который бы создовал файл с расширением exp (обычный текстовый файл только с переименованным расширением). При этом нужно чтобы в файл вносились данные по определенному алгоритму.
Пример файла который нужно получить:

Код: Выделить весь код
[mm]p9=128
[mm]p10=133
[mm]p11=137
[mm]p12=25
[mm]p13=65
[mm]p14=60
[mm]p15=8
[mm]p16=89
[mm]p17=17
и так далее...

При запуске скрипта должно выскачить окно в котором можно ввести данные. Пример окна:

Код: Выделить весь код
Диаметр окружности впадин зубьев, df             128
Делительный диаметр, d                           133
Диаметр окружности вершин зубьев, da             137
Ширина, b                                        25
Диаметр ступицы, dst                             65
Длина ступицы, Lst                               60
Толщина венца, hv                                8
Диаметр расположения отверстий, dro              89
Диаметр отверстий, do                            17
То что текстом - это пояснения, а для цифр должно быть поле для их ввода. При этом каждой фразе пояснения должно автоматически подставлятся [mm]p17=. Но не по порядку как в примере. Фраза в скобках и цифра после p может быть любая, заранее мною определенная для каждой фразы пояснения. После того как все данные введены нажимаем OK и должен получится нужный файл.

Отправлено: 20:50, 21-12-2009

 

Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Creat0R, ну да, так удобнее Спасибо всем за помощь! Сильно облегчили мне жизнь в проектировании.

Creat0R, ща глянул а файл что мне нужно получить имеет большое количество параметров. В связи с этим вопрос как изменить интервал между строками и можно ли как то окно сделать в два или даже три столбца?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 01:05, 22-12-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Creat0R, как менять разные расстояния понял а как сделать в два (три) столбца нет. Помогите пожалуйста

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 02:50, 22-12-2009 | #12


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Pozia:
В связи с этим вопрос как изменить интервал между строками и можно ли как то окно сделать в два или даже три столбца? »
Как раз для таких случаев есть _GUIScrollBars*:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <ScrollBarConstants.au3>
#include <GUIScrollBars.au3>

$hGUI = GUICreate('I''m a crasy dentist', 300, 350)
$hButton = GUICtrlCreateButton('Create file', 5, 317, 70, 25)

Global $aLabels, $aInput_Vals, $aiInputs, $iCount, $iScroll_Max
Global $sFile = @ScriptDir & '\file.ext'

$aLabels &= 'Диаметр окружности впадин зубьев, df|'
$aLabels &= 'Делительный диаметр, d|'
$aLabels &= 'Диаметр окружности вершин зубьев, da|'
$aLabels &= 'Ширина, b|'
$aLabels &= 'Диаметр ступицы, dst|'
$aLabels &= 'Длина ступицы, Lst|'
$aLabels &= 'Толщина венца, hv|'
$aLabels &= 'Диаметр расположения отверстий, dro|'
$aLabels &= 'Диаметр отверстий, do|'

$aInput_Vals &= '[mm]p9=|'
$aInput_Vals &= '[mm]p10=|'
$aInput_Vals &= '[mm]p11=|'
$aInput_Vals &= '[mm]p12=|'
$aInput_Vals &= '[mm]p13=|'
$aInput_Vals &= '[mm]p14=|'
$aInput_Vals &= '[mm]p15=|'
$aInput_Vals &= '[mm]p16=|'
$aInput_Vals &= '[mm]p17=|'

$aLabels = StringRegExpReplace($aLabels, '\|$', '')
$aLabels = StringSplit($aLabels, '|')

$aInput_Vals = StringRegExpReplace($aInput_Vals, '\|$', '')
$aInput_Vals = StringSplit($aInput_Vals, '|')

Dim $iCount = $aInput_Vals[0]
Dim $aiInputs[$iCount+1]

$hData_GUI = GUICreate("Data GUI", 290, 300, 0, 0, $WS_CHILD, $WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME, $hGUI)

For $i = 1 To $iCount
    $sVal = StringRegExpReplace(FileReadLine($sFile, $i), "^.*=(.*)$", "\1")
    If $sVal = "" Then $sVal = $i

    GUICtrlCreateLabel($aLabels[$i], 10, 10 + ($i-1) * 28, 180, 15)
    $aiInputs[$i] = GUICtrlCreateInput($sVal, 220, 10 + ($i-1) * 28, 50, 17, $ES_NUMBER)
Next

GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")

_GUIScrollBars_Init($hData_GUI)
_GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_HORZ, 0)
_GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_VERT, $iCount * 2)

GUISetState(@SW_SHOW, $hData_GUI)
GUISetState(@SW_SHOW, $hGUI)

GUISwitch($hGUI)

While 1
    $Msg = GUIGetMsg()

    Switch $Msg
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGUI)
            ExitLoop
        Case $hButton
            $hWrite = FileOpen($sFile, 2)

            For $i = 1 To $iCount
                FileWriteLine($hWrite, $aInput_Vals[$i] & GUICtrlRead($aiInputs[$i]))
            Next

            FileClose($hWrite)
    EndSwitch
WEnd

Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

    For $x = 0 To UBound($aSB_WindowInfo) - 1
        If $aSB_WindowInfo[$x][0] = $hWnd Then
            $index = $x
            $yChar = $aSB_WindowInfo[$index][3]
            ExitLoop
        EndIf
    Next
    If $index = -1 Then Return 0

    ; Get all the vertial scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    Switch $nScrollCode
        Case $SB_TOP ; user clicked the HOME keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Min)

        Case $SB_BOTTOM ; user clicked the END keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Max)

        Case $SB_LINEUP ; user clicked the top arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

        Case $SB_LINEDOWN ; user clicked the bottom arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

        Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

        Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

;~    // Set the position and then retrieve it.  Due to adjustments
;~    //   by Windows it may not be the same as the value set.

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")

    If ($Pos <> $yPos) Then
        _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
        $yPos = $Pos
    EndIf

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_VSCROLL

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:18, 22-12-2009 | #13


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Вроде все отлично. если возникнут еще вопросы спрошу.
PS Не обязательно но для удобства: Как сделать чтобы данное окно было поверх всех окон?
Можно ли как то задать определенные координаты появления окна? (как пример - верхний левый угол)

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 03:58, 22-12-2009 | #14


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Creat0R, пока спал пришла мысль. может ли автоит вытянуть параметры что я ввожу руками в Вами предложенный скрипт из файла EXCEL. Суть такова: EXCEL файл считает мне кучу параметров и потом сводит их в один столбец. В соседнем столбце могут быть:
Код: Выделить весь код
[mm]p9=
[mm]p10=
[mm]p11=
[mm]p12=
[mm]p13=
[mm]p14=
[mm]p15=
[mm]p16=
[mm]p17=
то есть получится два столбца с параметрами и значениями. Может ли автоит скрипт залезть в EXCEL, вытянуть эти параметры и сделать файл с расширением exp?

Отправлено: 10:58, 22-12-2009 | #15


Пользователь


Сообщения: 143
Благодарности: 24

Профиль | Отправить PM | Цитировать


Pozia, можно:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <ScrollBarConstants.au3>
#include <GUIScrollBars.au3>
#include <Excel.au3>

$hGUI = GUICreate('I''m a crasy dentist', 300, 350)
$hButton = GUICtrlCreateButton('Create file', 5, 317, 70, 25)
$hButton_excel = GUICtrlCreateButton('Из EXCEL', 225, 317, 70, 25)

;----- Для EXCEL ------------------------------------------------
Global  $sFileExcel = @ScriptDir & "\book.xls" ; имя файла
Global  $num_row = 12 ; номер строки с которого начинаются нужные значения
Global  $num_col = 8  ; номер столбца в котором находятся значения
;-----------------------------------------------------------------

Global $aLabels, $aInput_Vals, $aiInputs, $iCount, $iScroll_Max
Global $sFile = @ScriptDir & '\file.ext'

$aLabels &= 'Диаметр окружности впадин зубьев, df|'
$aLabels &= 'Делительный диаметр, d|'
$aLabels &= 'Диаметр окружности вершин зубьев, da|'
$aLabels &= 'Ширина, b|'
$aLabels &= 'Диаметр ступицы, dst|'
$aLabels &= 'Длина ступицы, Lst|'
$aLabels &= 'Толщина венца, hv|'
$aLabels &= 'Диаметр расположения отверстий, dro|'
$aLabels &= 'Диаметр отверстий, do|'

$aInput_Vals &= '[mm]p9=|'
$aInput_Vals &= '[mm]p10=|'
$aInput_Vals &= '[mm]p11=|'
$aInput_Vals &= '[mm]p12=|'
$aInput_Vals &= '[mm]p13=|'
$aInput_Vals &= '[mm]p14=|'
$aInput_Vals &= '[mm]p15=|'
$aInput_Vals &= '[mm]p16=|'
$aInput_Vals &= '[mm]p17=|'

$aLabels = StringRegExpReplace($aLabels, '\|$', '')
$aLabels = StringSplit($aLabels, '|')

$aInput_Vals = StringRegExpReplace($aInput_Vals, '\|$', '')
$aInput_Vals = StringSplit($aInput_Vals, '|')

Dim $iCount = $aInput_Vals[0]
Dim $aiInputs[$iCount+1]

$hData_GUI = GUICreate("Data GUI", 290, 300, 0, 0, $WS_CHILD, $WS_EX_CLIENTEDGE+$WS_EX_DLGMODALFRAME, $hGUI)

For $i = 1 To $iCount
    $sVal = StringRegExpReplace(FileReadLine($sFile, $i), "^.*=(.*)$", "\1")
    If $sVal = "" Then $sVal = $i

    GUICtrlCreateLabel($aLabels[$i], 10, 10 + ($i-1) * 28, 180, 15)
    $aiInputs[$i] = GUICtrlCreateInput($sVal, 220, 10 + ($i-1) * 28, 50, 17, $ES_NUMBER)
Next

GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")

_GUIScrollBars_Init($hData_GUI)
_GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_HORZ, 0)
_GUIScrollBars_SetScrollInfoMax($hData_GUI, $SB_VERT, $iCount * 2)

GUISetState(@SW_SHOW, $hData_GUI)
GUISetState(@SW_SHOW, $hGUI)

GUISwitch($hGUI)

While 1
    $Msg = GUIGetMsg()

    Switch $Msg
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGUI)
            ExitLoop
        Case $hButton
            $hWrite = FileOpen($sFile, 2)

            For $i = 1 To $iCount
                FileWriteLine($hWrite, $aInput_Vals[$i] & GUICtrlRead($aiInputs[$i]))
            Next

            FileClose($hWrite)
			
        Case $hButton_excel
				
	$oExcel = _ExcelBookOpen($sFileExcel)
			
	If 	@error = 1 Then
		MsgBox(0, "Error!", "Unable to Create the Excel Object")
	ElseIf 	@error = 2 Then
		MsgBox(0, "Error!", "File does not exist - Shame on you!")
	Else			
	      For $i = 1 to Ubound($aiInputs)-1
	            $sCellValue = _ExcelReadCell($oExcel, $i+($num_row-1), $num_col)
	            GUICtrlSetData($aiInputs[$i], $sCellValue)
	      Next
				
	     _ExcelBookClose($oExcel)
	EndIf
    EndSwitch
WEnd

Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

    For $x = 0 To UBound($aSB_WindowInfo) - 1
        If $aSB_WindowInfo[$x][0] = $hWnd Then
            $index = $x
            $yChar = $aSB_WindowInfo[$index][3]
            ExitLoop
        EndIf
    Next
    If $index = -1 Then Return 0

    ; Get all the vertial scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    Switch $nScrollCode
        Case $SB_TOP ; user clicked the HOME keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Min)

        Case $SB_BOTTOM ; user clicked the END keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Max)

        Case $SB_LINEUP ; user clicked the top arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

        Case $SB_LINEDOWN ; user clicked the bottom arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

        Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

        Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

;~    // Set the position and then retrieve it.  Due to adjustments
;~    //   by Windows it may not be the same as the value set.

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")

    If ($Pos <> $yPos) Then
        _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
        $yPos = $Pos
    EndIf

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_VSCROLL
Я сделал файл book.xls нужные значения начинались со строки 12 и столбца 8 (почему такие числа, так просто)

Последний раз редактировалось HORRIBLE, 22-12-2009 в 15:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 22-12-2009 | #16


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


HORRIBLE, у меня положение двух столбцов с параметрами и значениями находятся не вверху а ниже, где то на 50 строке. Как это учесть? И можно ли сделать без запуска экселя?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 14:34, 22-12-2009 | #17


Пользователь


Сообщения: 143
Благодарности: 24

Профиль | Отправить PM | Цитировать


Pozia, это учитывается здесь:
$num_row = номер строки, в вашем примере видимо это будет число 50
$num_col = номер столбца, вытащил эти строки в начала кода....


И можно ли сделать без запуска экселя? Не могу ответить, открываемое окно можно скрыть просто. Для этого нужно: $oExcel = _ExcelBookOpen($sFileExcel) заменить на $oExcel = _ExcelBookOpen($sFileExcel,0)

Последний раз редактировалось HORRIBLE, 22-12-2009 в 16:20.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:13, 22-12-2009 | #18


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата HORRIBLE:
И можно ли сделать без запуска экселя? »
нет. в любом случае нужна программа для открытия xls файла. либо Excel, либо oOO Calc, и т.д. если бы можно было читать оттуда данные без каких-либо программ, то не было бы смысла ставить Office. я думаю, это очевидно.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 22-12-2009 | #19


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Цитата HORRIBLE:
$num_row = номер строки, в вашем примере видимо это будет число 50
$num_col = номер столбца, вытащил эти строки в начала кода.... »
я сразу там и вставлял нужные цифры но не так понял пояснения.
Еще есть пожелание. Было бы хорошо, чтобы скрипт помимо самих значений еще и параметры типа:
Код: Выделить весь код
[mm]p9=
[mm]p10=
[mm]p11=
[mm]p12=
[mm]p13=
[mm]p14=
[mm]p15=
[mm]p16=
[mm]p17=
вытягивал из экселя. То есть в экселе у меня столбец параметров и рядом столбец чисел. Серипт должен их оттуда вытянуть и в принципе диалог мне не нужен. Просто пусть выскочит окно с кнопкой "ОК" что файл создан. А в скрипте хотелось бы только задать начало и конец столбца параметров и столбца чисел. Кстати если страниц несколько в эксель файле то как скрипт знает с какой страницы ему открыть числа?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:33, 22-12-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скрипт создания файла данных через диологовое окно. как?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Как вызвать диалоговое окно открытия файла? jaki Скриптовые языки администрирования Windows 4 30-03-2011 12:12
[решено] Как написать скрипт о проверке нужного файла на съемном носителе? Pozia AutoIt 12 05-03-2009 20:20
Интернет - Диалоговое окно загрузки файла IE убрать через реестр... 12usver12 Microsoft Windows 2000/XP 6 26-05-2008 15:41
Как остановить скрипт, пока юзер не закроет всплывающее окно? Gamover jr Вебмастеру 5 16-04-2008 20:08
Как взять дату создания файла из перла? radioamator Вебмастеру 2 30-04-2004 11:14




 
Переход