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
非常感谢!
页: 1 2 [3]
查看完整版本: 那位高手能否写个备忘录小软呢?