AutoIt的。字符串搜索和替换

时间:2014-09-03 15:57:51

标签: string autoit

我在一个文件夹(ini文件)中有多个文件。在每个文件中,在行之间我有一些看起来像这样的行

[12.3] ; here are some random numbers 

task = task0013

... some more lines

[74.1]

task = task6435

... and so on and so forth

“任务”之后的数字不是任何特定顺序,即升序或降序。

现在在另一个ini文件(A)中,所有文件中的所有值都存储为[SectionName]:

[task0013]

name=whatever

[task6452]

name=bla bla bla

... etc

我想要做的是将ini文件(A)中的值作为新行添加到开头所有这些ini文件中的相应[SectionName],所以它看起来像这样:

[12.3] ; here are some random numbers 

task = task0013

whatever

some other lines 

[74.1]

task = task6435

...

1 个答案:

答案 0 :(得分:0)

试试这里。它将修改现有的名称条目以匹配A.ini中的名称,并添加新的名称条目(如果它们不存在)。您必须将脚本文件复制到包含所有ini文件的文件夹中(A.ini或您调用它的任何内容也应该在那里)。确保首先备份文件,因为此脚本将修改现有文件,而不是创建新文件。

#include <Array.au3>
#include <File.au3>

Local $filenames = _FileListToArray(@ScriptDir)
Local $filenameA = "A.ini"

For $i = 1 To $filenames[0]
   ;ConsoleWrite($filenames[$i] & @CRLF)

   If StringRegExp($filenames[$i], "\.ini$") == 0 Or $filenames[$i] == $filenameA Then
      ContinueLoop
   EndIf

   Local $sectionNames = IniReadSectionNames($filenames[$i])

   For $j = 1 To $sectionNames[0]
      ;ConsoleWrite("adding data to section " & $sectionNames[$j] & " ..." & @CRLF)

      Local $curSection = IniReadSection($filenames[$i], $sectionNames[$j])

      For $k = 1 To $curSection[0][0]
         ;ConsoleWrite($curSection[$k][0] & " -> " & $curSection[$k][1] & @CRLF)

         If $curSection[$k][0] == "task" Then

            Local $newTaskName = IniRead($filenameA, $curSection[$k][1], "name", "")
            ;ConsoleWrite("name -> " & $taskName & @CRLF)
            Local $curTaskName = IniRead($filenames[$i], $sectionNames[$j], "name", "")

            If $curTaskName == "" Then
               _ArrayInsert($curSection, $k + 1, "name|" & $newTaskName, 0)
               ;_ArrayDisplay($curSection, "")
               IniWriteSection($filenames[$i], $sectionNames[$j], $curSection)
            Else
               IniWrite($filenames[$i], $sectionNames[$j], "name", $newTaskName)
            EndIf

            ExitLoop

         EndIf

      Next
   Next
Next