minbiao 发表于 2010-6-21 21:02:42

如何 利用AU3调动目录下所有ini文件关键字内容的位置?[已解决]

本帖最后由 minbiao 于 2010-6-30 16:20 编辑

比如:
目录:D:\文件
1.ini
[配置]
00123=12
[信息]
123=24
[参数]
12300=48

如何把目录中所有ini文件的[参数]放在[配置]和[信息]的中间? 也就是得到这样的结果

[配置]
00123=12
[参数]
12300=48
[信息]
123=24

小弟是新生,望各位大大帮帮忙! 谢谢!...

afan 发表于 2010-6-21 22:00:34

想快就用正则

minbiao 发表于 2010-6-21 22:10:49

刚才在看正则的表达式一不小心看到这个:
---------------------------------------------------------------------------
正则表达式学习起来其实是很简单的:

举例1.人=吃饭+睡觉+上班+玩。猪=吃饭+睡觉。代入得:人=猪+上班+玩。移项得:人-玩=猪+上班。 匹配的结果是:不懂玩的人等于会上班的猪!

举例2.男人=吃饭+睡觉+挣钱。猪=吃饭+睡觉。代入得:男人=猪+挣钱。移项得:男人-挣钱=猪。匹配的结果是:男人不挣钱的都是猪。   

举例3.女人=吃饭+睡觉+花钱。 猪=吃饭+睡觉。代入得:女人=猪+花钱。移项得:女人-花钱=猪。 匹配的结果是:女人不花钱的都是猪。   

举例4.男人+女人=(吃饭+睡觉+挣钱)+(吃饭+睡觉+花钱)=(猪+挣钱)+(猪+花钱)=两头猪。匹配的结果是:男人和女人在一起了就是两头猪。



郁闷中...

afan 发表于 2010-6-21 22:43:25

如果结构就这么简单,没其它的字段,如下:$Str = _
                '[配置]' & @CRLF & _
                '00123=12' & @CRLF & _
                '[信息]' & @CRLF & _
                '123=24' & @CRLF & _
                '[参数]' & @CRLF & _
                '12300=48' & @CRLF
Msgbox(0, '原字符串', $str)
$str = StringRegExpReplace($str, '(?s)(\[信息\].+)(\[参数\].+)', '$2$1')
Msgbox(0, '更换位置', $str)

minbiao 发表于 2010-6-21 23:23:15

thankyou! 我试一下!

minbiao 发表于 2010-6-22 00:29:16

小弟还有一个问题,
比如:
目录:D:\文件
1.ini
[配置]
00123=12
[信息]
123=24
[参数]
12300=48

如何把目录中所有ini文件的[参数]中的值12300=48写到[配置]中呢?
如果只是处理一个ini文件小弟懂写,但是是整个目录批量做处理就不懂了,对变量还不了解!

希望得到的结果是:
[配置]
00123=12
12300=48
[信息]
123=24
[参数]
12300=48

望各位大大帮帮忙! 谢谢!...

afan 发表于 2010-6-22 00:37:58

处理一个会写处理多个不就是多个遍历循环吗

minbiao 发表于 2010-6-22 00:58:02

$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(0, 1, @error)
For $i = 1 To $File
      $s_File = $Dir & '\' & $File[$i]
      $Var = IniRead($s_File, "参数", "12300", "")前面这么写对吗?

minbiao 发表于 2010-6-22 12:44:58

按照这个写法, 运行后所有ini最后只剩下48了....
小弟不才望指教!#include <File.au3>
$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(0, 2, @error)
For $i = 1 To $File
      $s_File = $Dir & '\' & $File[$i]
      $ini = IniRead($s_File, "参数", "12300", "")
      For $ii = 1 To $ini
                   $ini = IniWrite ($s_File, "配置", "12300", $ini )
      Next
      $fo = FileOpen($s_File, 2)
      FileWrite($fo, $ini)
      FileClose($fo)
Next

afan 发表于 2010-6-22 15:21:44

#include <File.au3>
$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(0, 2, @error)
For $i = 1 To $File
        $s_File = $Dir & '\' & $File[$i]
        $val = IniRead($s_File, "参数", "12300", "")
        IniWrite($s_File, "配置", "12300", $val)
Next

minbiao 发表于 2010-6-22 22:23:06

太感谢afan了!呵呵!
我还想问一下,如果我想做个检测,在所有ini的[配置]中存在12300=48就不进行操作,不正确或不存在则修改该成48,我自己写了一个但是没成功,望指点#include <File.au3>
$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(0, 2, @error)
For $i = 1 To $File
      $s_File = $Dir & '\' & $File[$i]
      $val = IniRead($s_File, "配置", "12300", "")
                        For $ii = 1 To $val
                                if $ii = "48" then
                                          exit
else
    IniWrite($s_File, "配置", "12300", "48")
        Exit
EndIf
        Next
Next

afan 发表于 2010-6-22 22:34:04

照你的意思,无论如何都要 [配置]中存在12300=48,不用判断直接 IniWrite()之不就完了?如果已存在12300=xx 就跳过才有判断的必要吧。
要判断也行:#include <File.au3>
$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(0, 1, @error)
For $i = 1 To $File
        $s_File = $Dir & '\' & $File[$i]
        $val = IniRead($s_File, "配置", "12300", "")
        If $val <> '48' Then IniWrite($s_File, "配置", "12300", "48")
Next

minbiao 发表于 2010-6-22 22:42:18

效率真快啊! 原来是这样! 再再再次谢谢afan !

xz00311 发表于 2010-6-23 09:57:56

原来还可以这样学到了

minbiao 发表于 2010-6-24 14:52:36

嘿嘿! afan大大在吗?小弟还有一事请教!
就12# 的代码来说,

能不能先判断出$val <> '48'的文件总量,然后再拿这个总量进行修改呢?
发现$val = '48'的文件就排除
页: [1] 2
查看完整版本: 如何 利用AU3调动目录下所有ini文件关键字内容的位置?[已解决]