wsclon 发表于 2016-1-3 21:00:32

【已解决】配置文件直接写宏如何实现

本帖最后由 wsclon 于 2016-1-8 15:16 编辑

需求:想按日期生成日志文件

脚本内容:
Const $Config_File="conf.ini"
Const $Log_File_ini=IniRead($Config_File,"config","Log_File","")
Const $Log_File_script="Log_"&@YEAR&@MON&@MDAY&"_script.log"

MsgBox(0,"$Log_File_script",$Log_File_script)
MsgBox(0,"$Log_File_ini",$Log_File_ini)

FileWriteLine($Log_File_ini,"ini")
FileWriteLine($Log_File_script,"script")


conf.ini内容:

Log_File="Log_"&@YEAR&@MON&@MDAY&"_ini.log"

通过脚本生成自然是没有问题,但是在ini直接写宏怎么都不对,请赐教!

luren666 发表于 2016-1-3 21:35:49

完全没有听明白楼主在说什么,想要什么结果,请您直接说出你的原始需求。Const $Config_File="conf.ini"
Const $Log_File_ini=IniRead($Config_File,"config","Log_File","")
Const $Log_File_script="Log_"&@YEAR&@MON&@MDAY&"_script.log"

;~ MsgBox(0,"$Log_File_script",$Log_File_script)
;~ MsgBox(0,"$Log_File_ini",$Log_File_ini)


IniWrite($Config_File,"config","Log_File",$Log_File_script)

FileWriteLine($Log_File_script,"ini")
FileWriteLine($Log_File_script,"script")

wsclon 发表于 2016-1-3 21:46:11

真不知道是我没表达对,还是你理解不好。

就是想在ini配置文件里写上@YEAR @MON @MDAY等宏。 每天的日志文件分开。我把代码改改你运行下就明白了。
脚本内容Const $Config_File="conf.ini"
Const $Log_File_ini=IniRead($Config_File,"config","Log_File","")

FileWriteLine($Log_File_ini,"ini")配置文件conf.ini内容

Log_File="Log_"&@YEAR&@MON&@MDAY&"_ini.log"

fuldho 发表于 2016-1-4 08:27:53

本帖最后由 fuldho 于 2016-1-4 08:29 编辑

楼主的意思很难理解,
是不是读取$Config_File,"config","Log_File","" 键值,再插入时间宏,保存在原键值中。

fuldho 发表于 2016-1-4 08:51:42

Const $Config_File="conf.ini"
Const $Log_File_ini=IniRead($Config_File,"config","Log_File","")

;FileWriteLine($Log_File_ini,"ini")


;追加到该键值未

IniWrite($Config_File,"config","Log_File",$Log_File_ini & " _"& @YEAR & @MON & @MDAY)

;另插入一行

IniWrite($Config_File,"config","new",@YEAR & @MON & @MDAY)回复 4# fuldho

luren666 发表于 2016-1-5 00:08:38

本帖最后由 luren666 于 2016-1-5 00:11 编辑

真替楼主着急,已经跟您说了,说出您的原始需要,结果还是说的不明不白,别人不是您肚子里的蛔虫,您不描述清楚,别人是不会知道您想要干嘛的。(猜测您是想程序一下直在后台运行,程序运行过程中会生成日志文件,每天的日志文件分开保存为不同的文件。如果猜对了,下面的代码也许可以帮助您。)#include <File.au3>
#include <Date.au3>
$day = @MDAY
$sLogPath=@ScriptDir
$LogFile = FileOpen($sLogPath & "\" & @MON & "月" & @MDAY & "日" & ".txt",1+8)
OnAutoItExitRegister("Onexit" )
MemoWrite("程序启动")

While 1
        If $day <> @MDAY Then
                MemoWrite("又是一天过去了。")
                FileClose($sLogPath & "\" & @MON & "月" & $day & "日" & ".txt")
                $LogFile = FileOpen($sLogPath & "\" & @MON & "月" & @MDAY & "日" & ".txt",1+8)
                $day = @MDAY
        EndIf
        Example()
        Sleep(3000)
WEnd


Func Example()
        MemoWrite( "工作函数")

EndFunc

Func MemoWrite($message="")
        FileWriteLine($LogFile, _NowCalc() & "        " & $message & @CRLF)
EndFunc

Func Onexit()
        MemoWrite("程序正常退出")
EndFunc

水木子 发表于 2016-1-5 09:53:24

不知道LZ是不是想这样?
Const $Config_File = "config.ini"
Const $Log_File_ini = IniRead($Config_File, "config", "Log_File", "")

MsgBox(0, "$Log_File_ini", "Log_" & Execute($Log_File_ini) & "_ini.log")


ini文件如下:


Log_File=@YEAR&@MON&@MDAY

wsclon 发表于 2016-1-5 11:04:51

就是楼上说的这样,我想按日期生成日志,比如今天是log_20160105.log明天是log_20160106.log。
但是不是在脚本里定义死年月日,这个我能做。
我想的是年月日的定义在配置文件里可以改。
楼上应该理解到我意思了,但是楼上的既然不行。

haijie1223 发表于 2016-1-5 17:07:45

还是不明白楼主的意思,好吧,我理解能力差。

luren666 发表于 2016-1-5 22:37:27

本帖最后由 luren666 于 2016-1-5 23:10 编辑

哦,我好像明白楼主的意思了,楼主的意思是在配置文件里面写上日志的命名规则,比如写:
Log_File="Log_"&@YEAR&@MON&@MDAY&"_ini.log"这样的话,他希望脚本生成的日志文件名是"Log_"开头,中间是"年月日",并以"_ini.log"结尾的文件名。假如写:Log_File=@YEAR&@MON&@MDAY & ".log" 那么最终生成的日志文件就是以“年月日.log”命名。他的意思就是定义一个命名规则,程序按照他的命令规格来生成日志文件。像"@year"这种会被程序自动识别成"宏",也就是替换成当前的年份的意思。不知道我猜的对不对?其实使用Execute 可以实现这个效果。楼主测试一下下面的代码就知道了,不过配置文件需要特殊的写法。$filename = IniRead("conf.ini","config","Log_file",@YEAR & @MON & @MDAY & ".log")
ConsoleWrite($filename & @CRLF)
$x = Execute($filename)
ConsoleWrite($x & @CRLF)配置文件
Log_File="'Log_'& @YEAR & @MON & @MDAY & '_ini.log'"

ddrs 发表于 2016-1-5 22:58:52

楼主的意思好像是上楼说的

luren666 发表于 2016-1-5 23:08:01

本帖最后由 luren666 于 2016-1-5 23:16 编辑

楼主好像太吝啬自己的文字了,我作为一个旁观者既然能把问题描述清楚,楼主做为提问的人,就更应该能说清楚。不要吝啬多打几个字,让我们其它帮忙的人来猜您的意思。其实7楼的水木子版主已经提出使用 execute 的方法了,楼主可果仔细研究,应该可以找到解决方案的。

wsclon 发表于 2016-1-8 15:15:34

果然通过execute运算一次就解决了,就是要注意引号的嵌套。

heroxianf 发表于 2016-1-10 00:16:22

好像最近我在纠结这个问题 记录下
页: [1]
查看完整版本: 【已解决】配置文件直接写宏如何实现