我无法为循环(For n = LBound(arrFileLines1) To UBound(arrFileLines1)
)重置n = 0。
示例文本文件:
7 a2 30 a1 30 a2 6 a1 5 a1 4 a1 3 a1 2 a3 1 a2
以下代码将找到第一个字符串“ 30”,并将其位置从7-255开始作为变量xxx。第一个字符串30为n = 1。
接下来,如果该行没有变量WriteLine
,将转到xxx
。
第一遍就可以了。我能够删除与变量xxx
相关的所有内容。
文本文件已更新为:
7 a2 30 a2 2 a3 1 a2
但是,n
之后将不会重设。 n
将从2开始。当n = 4时,我会收到错误消息:
下标超出范围:“ n”。
有没有一种方法可以重新重置n
从0开始?
Dim arrFileLines1()
Dim xxx'
q = 0
strCheckForString = ("30")
Set objFile = objFSO.OpenTextFile("C:\Users\1234\Desktop\output.txt", 1)
Do Until objFile.AtEndOfStream
ReDim Preserve arrFileLines1(q)
arrFileLines1(q) = objFile.ReadLine
q = q + 1
Loop
objFile.Close
For n = LBound(arrFileLines1) To UBound(arrFileLines1)
If (InStr(arrFileLines1(n), strCheckForString)) Then
xxx = Mid(arrFileLines1(n), 7, 255)
Set objFile = objFSO.OpenTextFile("C:\Users\1234\Desktop\output.txt", 2)
For m = LBound(arrFileLines1) To UBound(arrFileLines1)
If ((Mid(arrFileLines1(m), 7) = xxx) = True) And (n>m) Then
objFile.WriteLine arrFileLines1(m)
Else
If ((Mid(arrFileLines1(m), 7) = xxx ) = False) Then
objFile.writeline arrFileLines1(m)
End If
End If
Next
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\Users\1234\Desktop\output.txt", 1)
q = 0
Do Until objFile.AtEndOfStream
ReDim Preserve arrFileLines1(q)
arrFileLines1(q) = objFile.ReadLine
q = q + 1
Loop
objFile.Close
End If
Next
答案 0 :(得分:2)
您不应该篡改For
循环的循环变量。如果要自己控制循环变量,请使用Do..Loop
而不是For..Next
并根据需要递增/递减变量。
话虽如此,对我来说,您要使用代码实现的目标还不是很清楚。是否要删除所有以与字符串“ 30”开头的行相同的子字符串结尾的行?意味着要从示例输入中删除所有以“ a1”或“ a2”结尾的行吗?
如果是这样,我可能会做这样的事情:
由于您无论如何都将输入文件读取到内存中,因此可以这样做,并且避免了将数组追加到耗时的过程:
filename = "C:\Users\1234\Desktop\output.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile(filename).ReadAll
lines = Split(txt, vbNewLine)
从以字符串“ 30”开头的行中建立引用列表:
Set ref = CreateObject("Scripting.Dictionary")
For Each line In lines
If Left(line, 2) = "30" Then ref(Mid(line, 7, 255)) = True
Next
然后仅将那些不包含任何字符串的行写回到文件中:
Set f = fso.OpenTextFile(filename, 2)
For Each line In lines
found = False
For Each s In ref.Keys
If InStr(Mid(line, 7, 255), s) > 0 Then
found = True
Exit For
End If
Next
If Not found Then f.WriteLine line
Next
f.Close
使用字典的键而不是普通数组的优点是,您可以自动获取唯一字符串列表。