Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VBA宏解析xml/html类文本文件_Xml_Vba_Parsing - Fatal编程技术网

用VBA宏解析xml/html类文本文件

用VBA宏解析xml/html类文本文件,xml,vba,parsing,Xml,Vba,Parsing,我有一些原始数据从一个程序输出到一个文本文件中,我需要存储并格式化。文件输出如下所示: <Request> <code_set>1604</code_set> <start_code_value>-1</start_code_value> <block_size>10000</block_size> <ignore_access_ind>0</ignore_acc

我有一些原始数据从一个程序输出到一个文本文件中,我需要存储并格式化。文件输出如下所示:

<Request>
    <code_set>1604</code_set>
    <start_code_value>-1</start_code_value>
    <block_size>10000</block_size>
    <ignore_access_ind>0</ignore_access_ind>
</Request>

1604
-1
10000
0
所有数据都存储在请求或应答块中

所有数据都位于文本文件的单行

每个请求/应答块都有许多子块——这是有条件的;可能有1个,可能有1000个

块内的数据也是有条件的-可能有数据,也可能没有

我需要将其解析出来,以便在excel工作表的A列中读取子块的名称,B列包含数据(如果有)

选项显式
子参数()
Dim sRawData,arrcell(),arrBlocks,arrBlock,arrBlock子块,j,n,k
'从指定文件读取原始数据
sRawData=ReadTextFile(“C:\Users\DELL\Desktop\tmp\tmp.txt”,-2)
j=0
'将每个请求/答复块名称内容对放入数组
ParseText sRawData,“([\s\s]*?)”,arrBlocks
对于arrBlocks中的每个arrBlock
'将每个子块名称内容对放入数组
ParseText arrBlock(1),“([\s\s]*?)”,arrSubBlocks
n=UBound(子块)
'将数组数组转换为二维数组
清除棱细胞
ReDim保留ARR单元(n,1)
对于k=0到n
arrcell(k,0)=arrcublocks(k)(0)
arrcell(k,1)=arrcublocks(k)(1)
下一个
'从下一个未填充行开始输出二维数组
范围(单元格(j+1,1),单元格(j+n+1,2))。值=单元格
ActiveSheet.Columns.AutoFit
j=j+n+1
下一个
端接头
子解析文本(sText、SPATERN、ARR项)
Dim oMatch、sSubMatch、ARRRITEM
arrItems=Array()
使用CreateObject(“VBScript.RegExp”)
.Global=True
.MultiLine=True
.图案=飞溅
'进程匹配
对于.Execute(sText)中的每个oMatch
arrItem=Array()
“过程子匹配”
对于oMatch.SUBSMATCH中的每个sSubMatch
'每个子匹配字符串添加到子匹配数组
PushItem arrItem,sSubMatch
下一个
'每个匹配的子匹配数组添加到输出数组
PushItem arrItems,arrItem
下一个
以
端接头
子项(arrList,VariItem)
重拨保留arrList(UBound(arrList)+1)
arrList(UBound(arrList))=变量
端接头
函数ReadTextFile(sPath、iFormat)
'iFormat定义文件格式
'-2-系统默认值
'-1-Unicode
'0-ASCII
使用CreateObject(“Scripting.FileSystemObject”).OpenTextFile(sPath,1,False,iFormat)
ReadTextFile=“”
如果不是.AtEndOfStream,则ReadTextFile=.ReadAll
.结束
以
端函数