for-loop - 重置循环变量
问题描述
我无法为循环(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
如果该行没有 variable xxx
。
第一关就好了。我能够删除与 variable 相关的所有内容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
解决方案
你不应该篡改循环的循环变量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
使用字典的键而不是普通数组的优点是您可以自动获得唯一字符串的列表。
推荐阅读
- javascript - Javascript 为字符串值条件执行 if 和 else
- javascript - 在 html jquery 中激活和停用导航链接引导程序?
- tableau-api - 在 Tableau 中修改 python 代码并运行 PCA
- git - 如何通过使用“集成开发”将开发合并到智能 git 中的本地分支
- java - java.lang.IllegalAccessError:类 org.slf4j.LoggerFactory 试图访问私有字段 org.slf4j.impl.StaticLoggerBinder.SINGLETON
- email - 包含协议类型为“notes://”的 URL 的邮件是否属于网络钓鱼?
- swift - 键盘快速出现时文本视图向上
- javascript - 如何创建用矩形组成的文本?(画布,pixi.js,三个.js)
- curl - Exotel 通话适用于“发件人”用户而不适用于“收件人”用户?
- node.js - 在本地将托管数据库与 nodejs 连接