- 帖子
- 637
- 积分
- 1249
- 技术
- 1
- 捐助
- 0
- 注册时间
- 2012-7-1
|
本帖最后由 思想之翼 于 2023-3-2 11:51 编辑
回复 6# apang
谢谢您的帮助!代码运行快速,结果正确。
上述是仅有1列数据的运算,实际运用中txt文本有126列数据。
126列的txt文本格式:
5 15 ...
2 12 ...
6 6 ...
3 13 ...
9 9 ...
8 18 ...
10 10 ...
11 11 ...
12 2 ...
15 15 ...
18 18 ...
9 9 ...
16 6 ...
提取数据写入b.txt文本的格式:
2 13 ...
10 8 ...
9 6 ...
解决方案:
Set fso = CreateObject("Scripting.FileSystemObject")
For f = 1 to 300
Set file = fso.OpenTextFile(f & ".txt")
m = 21 : Max = 0 'm=总列数,Max=输出最大行数
ReDim arIn(m-1) : ReDim arOut(m-1)
Do Until file.AtEndOfStream
strLine = RegEx(file.ReadLine)
If strLine <> "" Then
ReDim PreServe ar(m-1,n)
For i = 0 to m-1
arIn(i) = arIn(i) & "$" & Split(strLine)(i) & " "
ar(i,n) = arIn(i)
Next
n = n + 1
End If
Loop
For i = 0 to m-1
For j = CLng(n/2) to 0 step -1
ar1 = Split(ar(i,n-1),ar(i,j))
If UBound(ar1) > 1 Then
For k = 1 to UBound(ar1) - 1
a = UBound(Split(ar1(k))) - 1
b = UBound(Split(ar(i,j))) - 1
If a >= 0 Then
arOut(i) = arOut(i)&Mid(Split(ar1(k))(a),2)&" "
Else
arOut(i) = arOut(i)&Mid(Split(ar(i,j))(b),2)&" "
End If
Next
Exit For
End If
Next
If UBound(Split(arOut(i))) > Max Then Max = UBound(Split(arOut(i)))
Next
For i = 0 to Max - 1
For j = 0 to m-1
If UBound(Split(arOut(j))) >= i Then
strOut = strOut & Split(arOut(j))(i) & vbTab
Else strOut = strOut & vbTab
End If
Next
strOut = Left(strOut,Len(strOut)-1) & vbCrLf
Next
fso.OpenTextFile("z" & f & ".txt",2,True).Write strOut
strOut = "" : n = "0"
Next
CreateObject("Wscript.Shell")
Function RegEx(strLine)
Set re = New RegExp
re.Pattern = "\s+"
re.Global = True
RegEx = Trim(re.Replace(strLine," "))
End Function |
|