afan
发表于 2010-7-13 00:52:12
回复 30# lynfr8
那个 _IniRenameKey 弄好了,帮忙测试下吧,没问题的话就可以入库了,呵呵#include <_Ini.au3>
; 函数名:_IniRenameKey;========================================================================
; 说明: 重命名INI结构文件里面的关键字。
; 语法: _IniRenameKey('ini文件路径', '字段名', '原关键字', '新关键字'[, '打开模式'])
; 返回值:成功: 返回1。
; 失败: 返回0。并设置 @Error 为以下值:
; @Error=1 原关键字不存在;
; @Error=2 新关键字已存在;
; @Error=3 新关键字为空或仅含有空格或首个非空格字符为“[”
; @Error=4 文件具有只读属性或者无法写入数据。
;==========================================================================================start
Func _IniRenameKey($iFile, $Section, $Key, $new_key, $mode = 0)
If StringRegExp($new_key, '^\s*(?:\[.*)?$') Then Return SetError(3, 0, 0)
_IniRead($iFile, $Section, $Key, @LF, $mode)
If @error Then Return SetError(1, 0, 0)
_IniRead($iFile, $Section, $new_key, @LF, $mode)
If Not @error Then Return SetError(2, 0, 0)
Local $s_File = _FileRead($iFile, $mode)
Local $_Section = StringRegExpReplace($Section, '^\h*(.+?)\h*$', '$1')
$_Section = StringRegExpReplace($_Section, '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)', '\\$1')
$_Section = '\[\h*' & $_Section & '\h*\]'
Local $_key = StringRegExpReplace($Key, '^\h*(.+?)\h*$', '$1')
$_key = StringRegExpReplace($_key, '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\|\=)', '\\$1')
Local $_new_key = StringRegExpReplace($new_key, '^\h*(.+?)\h*$', '$1')
$_new_key = StringRegExpReplace($_new_key, '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\|\=)', '\\$1')
Local $resdata = StringRegExpReplace(@CRLF & $s_File, '(?s)(?i)(.*\r?\n\h*' & $_Section & '.*?\r?\n)\h*(' & $_key & ')\h*(\=.*)', '${1}' & $_new_key & '$3')
$resdata = StringTrimLeft($resdata, 2)
Local $FO = FileOpen($iFile, $mode + 2)
Local $Write = FileWrite($FO, $resdata)
FileClose($FO)
If $Write = 0 Then Return SetError(4, 0, 0)
Return 1
EndFunc ;==>_IniRenameKey
newuser
发表于 2010-7-13 08:04:25
回复 28# lynfr8
非常感谢!
newuser
发表于 2010-7-13 08:11:04
回复 28# lynfr8
$date = _IniReadSectionNames('setting.ini', 0);读取ini所有‘字段名’
;标志=1时返回的数组0号元素为数组的元素数量(默认);标志=0时关闭0元素返回数量;不过,标志=0时并未关闭0元素返回数量,依然可以返回。
可不可以理解当:$date = _IniReadSectionNames('setting.ini', ,0/1)它们的效果都是一样的,数组下标为0都表示数组元素的个数,只不过他那么规定的,但规定看起来是有毛病的.
lxz
发表于 2010-7-13 08:18:13
学习学习了.
zcx880517
发表于 2010-7-13 10:38:20
http://www.autoitx.com/thread-16860-1-1.html
已经有高手写出了。。去看看吧。。
lynfr8
发表于 2010-7-13 19:57:26
回复lynfr8
$date = _IniReadSectionNames('setting.ini', 0);读取ini所有‘字段名’
;标志=1时返回 ...
newuser 发表于 2010-7-13 08:11 http://www.autoitx.com/images/common/back.gif
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=16385&pid=184952&fromuid=1003
_IniReadSectionNames($iFile, $mode = 0, $flag = 1)
$mode 你可以理解为fileopen那个打开模式:
0 = 只读模式(默认)
1 = 写入模式(附加数据到文件尾部)
2 = 写入模式(先删除之前的内容)
8 = 如果目标目录不存在就创建(参考注意).
16 = 强制使用二进制(字节)模式(参考注意)
32 = 使用 Unicode UTF16 小编码读写模式,读取不会覆盖存在的BOM.
64 = 使用 Unicode UTF16 大编码读写模式,读取不会覆盖存在的BOM.
128 = 使用 Unicode UTF8 (带BOM)读写模式,读取不会覆盖存在的BOM.
256 = 使用 Unicode UTF8 (无BOM)读写模式.
16384 = 当打开一个文件读取时(文件没有BOM), 使用完整文件 UTF8 检测. 如果没有使用这一模式,则只会检测文件最前端的 UTF8 标志.
$flag 的含义才是:
标志=1时返回的数组0号元素为数组的元素数量(默认);标志=0时关闭0元素返回数量;不过,标志=0时并未关闭0元素返回数量,依然可以返回。
lynfr8
发表于 2010-7-14 00:44:41
回复lynfr8
那个 _IniRenameKey 弄好了,帮忙测试下吧,没问题的话就可以入库了,呵呵
afan 发表于 2010-7-13 00:52 http://www.autoitx.com/images/common/back.gif
已经测试过了,很完美!!!
2.ini
1=o
nnp=p
3=ppp#include <_Ini.au3>
_IniRenameKey('2.ini', '1', '3', 'nnn',0)
newuser
发表于 2010-7-14 08:54:29
回复 36# lynfr8
非常感谢!