【已解决】网上文件读取写入二维数组
本帖最后由 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', '项目公告']
]
结果:
00000000000009ygme
2014-08-22
70987
其他
其他公告
00000000000009yjrp
2014-08-22
项 目:完成公告
70511
项目
项目投资
00000000000009ygmc
2014-08-22
公司签署“服务协议”认可意见[一]
70987
投资
投资公告
00000000000009yg26
2014-08-22
进展公告
70643
项目
项目公告
其中包含PDF的元素可以不要,第一组的金额表示中有","出现分组不成功的情况,其它组正常,如果去掉","的限制,结果更不符合预期...
正则得到一维数组后,我可以自己转换成二维数组,现在的问题就是没法分出来,可能还是我对正则理解不够的问题。希望能得到各位指点一二,谢谢! 本帖最后由 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 = $tempstr但是下面这样是可以的local $temparr = [["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", "项目公告"]]】是变化的,来赋值给二维数组? 在其它贴子发现了个正则:'(.*?)'
先用着了,不知道大家还有没更好的 遍历啊,大哥。
一个个赋值吧,这个偷懒不了。 回复 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, '"([^"]+)"', 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 回复 5# user3000
非常感谢!这个 Func 写得太好了
页:
[1]