找回密码
 加入
搜索
查看: 7524|回复: 5

[AU3基础] 【已解决】网上文件读取写入二维数组

[复制链接]
发表于 2014-8-29 22:34:39 | 显示全部楼层 |阅读模式
本帖最后由 mdxaux 于 2014-8-30 20:13 编辑

求指点,我从网络上下载到的文件包含如下数据:
data:[['00000000000009ygme', '2014-08-22', '其他投资2,000万元', '70987', '其他', 'ls_1200148678.PDF', '其他公告'],['00000000000009yjrp', '2014-08-22', '项 目:完成公告', '70511', '项目', 'ls_1200149390.PDF', '项目投资'],['00000000000009ygmc', '2014-08-22', '公司签署“服务协议”认可意见[一]', '70987', '投资', 'ls_1200148676.PDF', '投资公告'],['00000000000009yg26', '2014-08-22', '进展公告', '70643', '项目', 'ls_1200148530.PDF', '项目公告']]

想过用正则,没分把数据分离出来,用过的正则如下:
(?<=')[^,':_]+(?=')

data:[
['00000000000009ygme', '2014-08-22', '其他投资2,000万元', '70987', '其他', 'ls_1200148678.PDF', '其他公告'],
['00000000000009yjrp', '2014-08-22', '项 目:完成公告', '70511', '项目', 'ls_1200149390.PDF', '项目投资'],
['00000000000009ygmc', '2014-08-22', '公司签署“服务协议”认可意见[一]', '70987', '投资', 'ls_1200148676.PDF', '投资公告'],
['00000000000009yg26', '2014-08-22', '进展公告', '70643', '项目', 'ls_1200148530.PDF', '项目公告']
]
结果:
[0]00000000000009ygme
[1]2014-08-22
[2]70987
[3]其他
[4]其他公告

[5]00000000000009yjrp
[6]2014-08-22
[7]项 目:完成公告
[8]70511
[9]项目
[10]项目投资

[11]00000000000009ygmc
[12]2014-08-22
[13]公司签署“服务协议”认可意见[一]
[14]70987
[15]投资
[16]投资公告

[17]00000000000009yg26
[18]2014-08-22
[19]进展公告
[20]70643
[21]项目
[22]项目公告


其中包含PDF的元素可以不要,第一组的金额表示中有","出现分组不成功的情况,其它组正常,如果去掉","的限制,结果更不符合预期...
正则得到一维数组后,我可以自己转换成二维数组,现在的问题就是没法分出来,可能还是我对正则理解不够的问题。希望能得到各位指点一二,谢谢!
 楼主| 发表于 2014-8-29 22:38:32 | 显示全部楼层
本帖最后由 mdxaux 于 2014-8-29 22:53 编辑

补充:直接给二维数组赋值是否可行?

我试过下面的代码,但是无法给二维数组赋值成功
$tempstr='[["00000000000009ygme", "2014-08-22", "其他投资2,000万元", "70987", "其他", "ls_1200148678.PDF", "其他公告"],["00000000000009yjrp", "2014-08-22", "项 目:完成公告", 70511", "项目", "ls_1200149390.PDF", "项目投资"],["00000000000009ygmc", "2014-08-22", "公司签署“服务协议”认可意见[一]", "70987", "投资", "ls_1200148676.PDF", "投资公告"],["00000000000009yg26", "2014-08-22", "进展公告", "70643", "项目", "ls_1200148530.PDF", "项目公告"]]'
local $temparr[3][7] = $tempstr
但是下面这样是可以的
local $temparr[3][7] = [["00000000000009ygme", "2014-08-22", "其他投资2,000万元", "70987", "其他", "ls_1200148678.PDF", "其他公告"],["00000000000009yjrp", "2014-08-22", "项 目:完成公告", 70511", "项目", "ls_1200149390.PDF", "项目投资"],["00000000000009ygmc", "2014-08-22", "公司签署“服务协议”认可意见[一]", "70987", "投资", "ls_1200148676.PDF", "投资公告"],["00000000000009yg26", "2014-08-22", "进展公告", "70643", "项目", "ls_1200148530.PDF", "项目公告"]]
有没有办法让红色部分【[["00000000000009ygme", "2014-08-22", "其他投资2,000万元", "70987", "其他", "ls_1200148678.PDF", "其他公告"],["00000000000009yjrp", "2014-08-22", "项 目:完成公告", 70511", "项目", "ls_1200149390.PDF", "项目投资"],["00000000000009ygmc", "2014-08-22", "公司签署“服务协议”认可意见[一]", "70987", "投资", "ls_1200148676.PDF", "投资公告"],["00000000000009yg26", "2014-08-22", "进展公告", "70643", "项目", "ls_1200148530.PDF", "项目公告"]]】是变化的,来赋值给二维数组?
 楼主| 发表于 2014-8-29 23:27:48 | 显示全部楼层
在其它贴子发现了个正则:'(.*?)'
先用着了,不知道大家还有没更好的
发表于 2014-8-29 23:28:33 | 显示全部楼层
遍历啊,大哥。
一个个赋值吧,这个偷懒不了。
发表于 2014-8-30 17:44:45 | 显示全部楼层
回复 2# mdxaux


    只是针对2楼的回复:
#include<array.au3>
$tempstr='[["00000000000009ygme", "2014-08-22", "其他投资2,000万元", "70987", "其他", "ls_1200148678.PDF", "其他公告"],' & _
           '["00000000000009yjrp", "2014-08-22", "项 目:完成公告", "70511", "项目", "ls_1200149390.PDF", "项目投资"],' & _
                   '["00000000000009ygmc", "2014-08-22", "公司签署“服务协议”认可意见[一]", "70987", "投资", "ls_1200148676.PDF", "投资公告"],' & _
                   '["00000000000009yg26", "2014-08-22", "进展公告", "70643", "项目", "ls_1200148530.PDF", "项目公告"]]'
local $aTemp = _str2array($tempstr)
;MsgBox(0,'', @error)
If IsArray($aTemp) Then _ArrayDisplay($aTemp)


Func _str2array($str)
        If Not StringRegExp($str, '^\[\[') Or Not StringRegExp($str, '\]\]) Then Return SetError(1)
        Local $sRe = StringRegExp($str, '\[(".+?")\]', 3)
        If @error Then Return SetError(2)
        Local $sRe2 = StringRegExp($sRe[0], '"([^"]+)"', 3)
        If @error Then Return SetError(3)
        Local $iBd = UBound($sRe)
        Local $iBd2 = UBound($sRe2)
        Local $aTemp[$iBd][$iBd2]
        For $i = 0 To $iBd -1
                $sRe2 = StringRegExp($sRe[$i], '"([^"]+)"', 3)
                If @error Then ContinueLoop
                For $ii = 0 To $iBd2 -1
                        ConsoleWrite($i & @TAB & $ii & @TAB & $sRe2[$ii] & @CRLF)
                    $aTemp[$i][$ii] = $sRe2[$ii]
                Next
        Next
        Return SetError(0, '', $aTemp)
EndFunc
 楼主| 发表于 2014-8-30 20:09:27 | 显示全部楼层
回复 5# user3000

非常感谢!这个 Func 写得太好了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 12:58 , Processed in 0.076641 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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