本站文章如无特别注明均系原创,转载请注明出处。
最近手头上的一项工作需要将批量的文本数据实现行列转换,虽然利用excel可以实现,但还是嫌之太过麻烦(网上找了些实现类似功能的vba脚本都没能顺利运行起来),最后只得自己动手写了一个vbs脚本来实现此项功能。抛砖引玉一下。
手头的原始数据是如下格式的
A,1
B,2
C,3
D,4
E,5
转换后的格式为
A,B,C,D,E
1,2,3,4,5
代码如下(请新建一个1.txt文本并将原始数据复制保存到1.txt,将下面的代码另存为.vbs文件并将文件和1.txt置于同一目录下运行即可查看转换后的文本2.txt)
Set objFSO = CreateObject("Scripting.FileSystemObject")
'读入原始数据文件1.txt的内容
Set objFile = objFSO.OpenTextFile("1.txt")
'将数据按行分割成数组
a = Split(objFile.ReadAll,vbCrlf)
'获取原始数据文件的行数作为二维数组的行
X = UBound(a)
'将每一行的数据按照“,”号分割,并获取分割后的数组下标作为二维数组的列
Y = UBound(Split(a(0),","))
'Wscript.Echo Y
'定义二维数组并写入数据
Redim Z(X,Y)
for i = 0 to X
b = split(a(i),",")
'Wscript.Echo a(i)
for j = 0 to Y
'Wscript.Echo b(j)
z(i,j) = b(j)
next
next
'创建2.txt用于写入转换完成的数据
Set objFile = objFSO.CreateTextFile("2.txt")
'将二维数组转换成字符串形式,每一行之间用"#"号隔开
For j = 0 to Y
For i = 0 to X
s = s&","&z(i,j)
Next
s = s & "#"
'Wscript.Echo s
Next
'将字符串按照"#"号分割成一维数组
s = split(s,"#")
'将数组逐段读取转成字符串,写入2.txt
For i = 0 to UBound(s) - 1
t = s(i)
slen = len(t)
'Wscript.Echo s(i)
t = right(t,slen-1)
'Wscript.Echo t
objFile.WriteLine t
Next
评论
发表新评论