找回密码
 加入
搜索
查看: 3393|回复: 13

[效率算法] 【已解决】配置文件直接写宏如何实现

 火.. [复制链接]
发表于 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内容:
[config]
Log_File="Log_"&@YEAR&@MON&@MDAY&"_ini.log"

通过脚本生成自然是没有问题,但是在ini直接写宏怎么都不对,请赐教!
发表于 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")
 楼主| 发表于 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内容
[config]
Log_File="Log_"&@YEAR&@MON&@MDAY&"_ini.log"
发表于 2016-1-4 08:27:53 | 显示全部楼层
本帖最后由 fuldho 于 2016-1-4 08:29 编辑

楼主的意思很难理解,
是不是读取$Config_File,"config","Log_File","" 键值,再插入时间宏,保存在原键值中。
发表于 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
发表于 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文件如下:

[config]
Log_File=@YEAR&@MON&@MDAY
 楼主| 发表于 2016-1-5 11:04:51 | 显示全部楼层
就是楼上说的这样,我想按日期生成日志,比如今天是log_20160105.log明天是log_20160106.log。
但是不是在脚本里定义死年月日,这个我能做。
我想的是年月日的定义在配置文件里可以改。
楼上应该理解到我意思了,但是楼上的既然不行。
发表于 2016-1-5 17:07:45 | 显示全部楼层
还是不明白楼主的意思,好吧,我理解能力差。
发表于 2016-1-5 22:37:27 | 显示全部楼层
本帖最后由 luren666 于 2016-1-5 23:10 编辑

哦,我好像明白楼主的意思了,楼主的意思是在配置文件里面写上日志的命名规则,比如写:
[config]
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)
配置文件
[config]
Log_File="'Log_'  & @YEAR & @MON & @MDAY & '_ini.log'"
发表于 2016-1-5 22:58:52 | 显示全部楼层
楼主的意思好像是上楼说的
发表于 2016-1-5 23:08:01 | 显示全部楼层
本帖最后由 luren666 于 2016-1-5 23:16 编辑

楼主好像太吝啬自己的文字了,我作为一个旁观者既然能把问题描述清楚,楼主做为提问的人,就更应该能说清楚。不要吝啬多打几个字,让我们其它帮忙的人来猜您的意思。其实7楼的水木子版主已经提出使用 execute 的方法了,楼主可果仔细研究,应该可以找到解决方案的。
 楼主| 发表于 2016-1-8 15:15:34 | 显示全部楼层
果然通过execute运算一次就解决了,就是要注意引号的嵌套。
发表于 2016-1-10 00:16:22 | 显示全部楼层
好像最近我在纠结这个问题 记录下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 14:15 , Processed in 0.085329 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表