找回密码
 加入
搜索
查看: 2686|回复: 8

[AU3基础] 已解决文件内容按类别转为数组问题

  [复制链接]
发表于 2012-4-26 23:32:39 | 显示全部楼层 |阅读模式
本帖最后由 网店 于 2012-4-27 23:30 编辑

现有文件里有几类内容 如:
在类 config1 里有
a
b
c
三条名称

在类 config2 里有
1
2
3
4
四条名称

问题:
此文件格式(待定)用INI 或者TXT,如何能按类转为数组形式

Dim $ config1[]
Dim $ config2[]
发表于 2012-4-27 01:27:47 | 显示全部楼层
;;;;;;;;;;;;  test.ini  ;;;;;;;;;;;;;;
[config1]
a=
b=
c=

[config2]
1=
2=
3=
4=

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#include <Array.au3>

Local $fields = IniReadSectionNames(@ScriptDir & "\test.ini")
_ArrayDisplay($fields, "字段情况")

Dim $config1[1]
Dim $config2[1]
Local $i
Local $j
For $i = 1 To $fields[0]
        Local $keywords_values = IniReadSection(@ScriptDir & "\test.ini", $fields[$i])
        _ArrayDisplay($keywords_values, $fields[$i] & "字段的关键字和值")
        If $fields[$i] = "config1" Then
                ReDim $config1[$keywords_values[0][0]]
                For $j = 0 To $keywords_values[0][0]-1
                        $config1[$j] = $keywords_values[$j+1][0]
                Next
        EndIf
        If $fields[$i] = "config2" Then
                ReDim $config2[$keywords_values[0][0]]
                For $j = 0 To $keywords_values[0][0]-1
                        $config2[$j] = $keywords_values[$j+1][0]
                Next
        EndIf
Next
_ArrayDisplay($config1, "数组$config1")
_ArrayDisplay($config2, "数组$config2")
发表于 2012-4-27 03:13:42 | 显示全部楼层
没明白lz的意图
发表于 2012-4-27 08:48:50 | 显示全部楼层
如果是txt文件则更简单:
#Include <File.au3>
#include <Array.au3>
Local $config1,$config2
_FileReadToArray("config1.txt",$config1)
_FileReadToArray("config2.txt",$config2)
_ArrayDisplay($config1)
_ArrayDisplay($config2)
发表于 2012-4-27 08:58:02 | 显示全部楼层
真心没看懂
发表于 2012-4-27 09:57:17 | 显示全部楼层
4楼我理解有误,重新来过,假设对象文件为txt格式,类名前6个字符都为config。
;;;;;;;;;;;test.txt;;;;;;;;;;;;;;
config1
a
b
c
config2
1
2
3
4
config3
aa
bb
cc
dd
ee
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <Array.au3>
Local $n = 0, $m = 0
Local $Array[5][10]
$File = FileOpen(@ScriptDir & "\test.txt", 0)
While 1
        Local $line = FileReadLine($File)
        If @error = -1 Then ExitLoop
        If StringLeft($line, 6) == "config" Then
                $n += 1
                $m = 0
        Else
                $m += 1
                $Array[$n][$m] = $line
        EndIf        
WEnd
_ArrayDisplay($Array)
FileClose($File)
发表于 2012-4-27 10:59:30 | 显示全部楼层
生成二维数组吗?
#include <Array.au3>
Local $Str = _
                'config1' & @CRLF & _
                'a' & @CRLF & _
                'b' & @CRLF & _
                'c' & @CRLF & _
                'config2' & @CRLF & _
                '1' & @CRLF & _
                '2' & @CRLF & _
                '3' & @CRLF & _
                '4' & @CRLF & _
                'config3' & @CRLF & _
                'aa' & @CRLF & _
                'bb' & @CRLF & _
                'cc' & @CRLF & _
                'dd' & @CRLF & _
                'ee'
MsgBox(0,'原始字符串',$str)
Local $Test = StringRegExp($str, '(?ms)(?<=config\d).*?(?=(?:config\d|\Z))', 3)
Local $Array[UBound($Test)][1],$K=1
For $i=0 to UBound($Test)-1
        $tmp=StringRegExp($Test[$i],'[^\r\n]+',3)
        If UBound($tmp)+1>$K Then 
                $K=UBound($tmp)+1
                ReDim $Array[UBound($Array)][$K]
        EndIf
        
        $Array[$i][0]="CONFIG"&$I+1
        For $n=1 to $K-1
                $Array[$i][$n]=$tmp[$n-1]
        Next
Next
_ArrayDisplay($Array)

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
网店 + 20 + 2

查看全部评分

发表于 2012-4-27 16:49:39 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-4-27 16:53 编辑

是不是这个意思??


        [config1]
        a
        b
        c
       
        [config2]
        1
        2
        3
        4

#include <Array.au3>

Local $config1[3], $config2[4]

Local $File = FileOpen(@ScriptDir & "\test.txt")
Local $Str = FileRead($File)
FileClose($File)

Local $Test = StringRegExp($Str, '(\w+)(?=\r|$)', 3)

For $i = 0 To UBound($Test) - 1
        If $i < 3 Then
                $config1[$i] = $Test[$i]
        Else
                $config2[$i - 3] = $Test[$i]
        EndIf
Next
_ArrayDisplay($config1, '$config1')
_ArrayDisplay($config2, '$config2')

评分

参与人数 1金钱 +30 贡献 +5 收起 理由
网店 + 30 + 5

查看全部评分

 楼主| 发表于 2012-4-27 23:29:42 | 显示全部楼层
厉害。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 23:16 , Processed in 0.087299 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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