Что нового

Использовать au3-код с внешнего txt-файла

Ranos1982

Новичок
Сообщения
130
Репутация
1
Всем доброго времени.Подскажите как осуществить следуещее..
Например у нас есть код , и есть участок который при необходимости можно будет редактировать.Этот участок хранится в файле test.txt к примеру.Как грамотно его это реализовать....(часть кода программы лежит во внешнем файле txt)

на примере:
Код:
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
#include <GUIListBox.au3>
#include <GuiRichEdit.au3>

;                                           Additional
_OnAutoItErrorRegister("", "", "Error")
_IEErrorHandlerRegister("errorHandler")



;                                           Variables
Global $timer = '0', $icon = '0', $typeTime = '0', $AllTime = '0'
Global $hImage, $timerResult, $timerInit, $index, $column, $oIE, $hGUI, $valueEnter, $forumLink
Global $indexImageList, $indexTopic, $indexLogin, $indexTopicRead, $indexTypeRead, $indexLoginRead, $indexCategoryRead
Global $hRichEdit, $type, $iLastListViewIndex, $counterorm1, $fileNameSettings, $linkForum = '', $tIndex, $indexTopicRead_temp, $tempResult, $stringCounter_temp = 0
Global $timeWaitDefault = 120000, $counterAM = 0, $selectedLast = 'null'

#region Здесь код работает,который у нас в файле txt


$selectAll = GUICtrlCreateCheckbox("Select All", 8, 508, 60, 16)
GUICtrlSetFont($selectAll, 9, 200, 1, "Georgia")
$autoModeWork = GUICtrlCreateCheckbox("Auto Mode", 80, 508, 80, 16, BitOR($BS_AUTO3STATE, $BS_NOTIFY))
GUICtrlSetFont($autoModeWork, 9, 200, 1, "Georgia")
$multithreading = GUICtrlCreateCheckbox("Multi", 170, 508, 80, 16, BitOR($BS_AUTO3STATE, $BS_NOTIFY))
GUICtrlSetFont($multithreading, 9, 200, 1, "Georgia")

#endregion Здесь код работает,который у нас в файле txt

:whistle:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Я имею ввиду не построчно....а примерно так :

Код:
$i = Random(5, 15, 1)
If $i >= 10 Then
    Execute(FileRead(@ScriptDir & '\1.txt'))
EndIf
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Ниче не понял.Нужно по-проще как то.Зачем чтото подключать,парсить..нужно просто исполнять часть кода с файла txt - так можно?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Код:
#include 'File.txt'
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Блин,там кусок будет ТЕКУЩЕГО кода.Зачем мне include,я же написал пример.Там будут не ф-ции а код,просто эта часть будет во внешнем файле,а все остальная часть (!) будет как обычно - в самой программе.

Тоесть мне нужно как
Код:
Execute (FileRead('file.txt'))
,но не построчно,а весь файл...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 545
Репутация
2 428
Ranos1982 [?]
Блин,там кусок будет ТЕКУЩЕГО кода.Зачем мне include,я же написал пример
В этой теме есть все возможные варианты.
Kaster скорее всего попал в точку, тебе именно #include и нужен:

Код:
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
#include <GUIListBox.au3>
#include <GuiRichEdit.au3>

;                                           Additional
_OnAutoItErrorRegister("", "", "Error")
_IEErrorHandlerRegister("errorHandler")



;                                           Variables
Global $timer = '0', $icon = '0', $typeTime = '0', $AllTime = '0'
Global $hImage, $timerResult, $timerInit, $index, $column, $oIE, $hGUI, $valueEnter, $forumLink
Global $indexImageList, $indexTopic, $indexLogin, $indexTopicRead, $indexTypeRead, $indexLoginRead, $indexCategoryRead
Global $hRichEdit, $type, $iLastListViewIndex, $counterorm1, $fileNameSettings, $linkForum = '', $tIndex, $indexTopicRead_temp, $tempResult, $stringCounter_temp = 0
Global $timeWaitDefault = 120000, $counterAM = 0, $selectedLast = 'null'

#region Здесь код работает,который у нас в файле txt

#include "test.txt"

#endregion Здесь код работает,который у нас в файле txt
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Ranos1982 [?]
Блин,там кусок будет ТЕКУЩЕГО кода
мне без разницы, как и интерпретатору, что там, кусок, целиком, будущего или прошлого кода. include просто добавляет все строки которые находятся в подключаемом файле в основной код.
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Спасибо всем....прошу прощения,если что не так..
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Ranos1982

{TopicSolvedInfo}
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Но ведь человеку нужно чтобы далее скомпилированный скрипт работал брав код из txt файла,а если сделать как вы писали
Код:
#include <file.txt>
то после компиляции скрипта файл txt можно будет просто выбросить в корзину,так как он уже будет добавлен в сам скомпилированный скрипт и его нельзя будет изменить,через PluginInclude ему не нужно потому что это не функция
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 545
Репутация
2 428
Sergey2210 [?]
Но ведь человеку нужно чтобы далее скомпилированный скрипт работал брав код из txt файла,
Ты уже научился мысли на расстояний читать?
Автор темы про компиляцию ничего не писал.
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Я просто знаю чего он хочет,я тоже когда то хотел чтоб скомпилированный скрипт брал код из внешнего файла :smile:
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Creator,Sergey2210- прав. Я так понимаю это сделать нельзя? А если просто запускать скрипт после запуска программы? тоесть есть программа-оболочка , в ней сам интерператор и скрипт.И там команда в оболочке - извлечь файлы txt и сам скрипт и запускать скрипт с помощью самой оболочки что и является интерператором
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 545
Репутация
2 428
Ranos1982 [?]
Значит ты не прав. Нужно упоминать такие детали при созданий темы.

Я так понимаю это сделать нельзя?
Также просто как с #include, нет.
Но можно делать через Execute (как уже предлагалось выше, но с перебором всех строк):

Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIListView.au3>
#include <GUIListBox.au3>
#include <GuiRichEdit.au3>

;                                           Additional
;_OnAutoItErrorRegister("", "", "Error")
;_IEErrorHandlerRegister("errorHandler")

;                                           Variables
Global $timer = '0', $icon = '0', $typeTime = '0', $AllTime = '0'
Global $hImage, $timerResult, $timerInit, $index, $column, $oIE, $hGUI, $valueEnter, $forumLink
Global $indexImageList, $indexTopic, $indexLogin, $indexTopicRead, $indexTypeRead, $indexLoginRead, $indexCategoryRead
Global $hRichEdit, $type, $iLastListViewIndex, $counterorm1, $fileNameSettings, $linkForum = '', $tIndex, $indexTopicRead_temp, $tempResult, $stringCounter_temp = 0
Global $timeWaitDefault = 120000, $counterAM = 0, $selectedLast = 'null'

;Эти переменные задаются через Assign, поэтому их необходимо предварительно объявить (чтобы избежать синтаксических ошибок при использований этих переменных)
Global $selectAll, $autoModeWork, $multithreading

$hGUI = GUICreate(@ScriptName, 400, 600)

#region Здесь код работает,который у нас в файле txt

_Include(@ScriptDir & "\test.txt")

#endregion Здесь код работает,который у нас в файле txt

GUISetState()

While 1
	$nMsg = GUIGetMsg()

	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _Include($sFile)
	Local $aRead = StringSplit(StringStripCR(FileRead($sFile)), @LF)
	
	For $i = 1 To $aRead[0]
		$sExec = StringRegExpReplace($aRead[$i], "^(?:\s*\$(\w+)\s*=)?\s*(.*)$", "\2")
		$sAssign = StringRegExpReplace($aRead[$i], "^\s*\$(\w+)\s*=\s*.*$", "\1")
		
		If @extended And $sAssign <> $aRead[$i] Then
			Assign($sAssign, Execute($sExec), 2)
		Else
			Execute($sExec)
		EndIf
	Next
EndFunc
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
это точно будет правильно работать? а подругому никак? просто...пугают регулярные выражения.

В след.раз буду уточнять подробности.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 545
Репутация
2 428
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
прости,прости,прости creator просто я имею ввиду надежное ли это решение для использования кода из внешнего файла? проблем не будет? программа просто важная...и с любым кодом справится? просто проверить пока не могу..
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
;Эти переменные задаются через Assign, поэтому их необходимо предварительно объявить (чтобы избежать синтаксических ошибок при использований этих переменных)


это никак нельзя исправить?
 
Верх