所以我有一种情况,我在for循环中使用if语句,需要检查当前迭代和条件的下一次迭代。
目前我有:
For i = 1 To Len(inLine)
If Asc(Mid(inLine, i, 1)) = 10 And dnl = False Then
dnl = True
outLine = outLine + " "
ElseIf Asc(Mid(inLine, i, 1)) = 10 And dnl = True Then
dnl = False
outLine = outLine & ">" & vbNewLine & "<"
Else
dnl = False
outLine = outLine & Mid(inLine, i, 1)
End If
Next
在我正在解析的文件中,有些区域使用双换行来分隔文本块。但这些新行并不总是可读的。例如,当读取文件时,即使包含换行符,整个文件也会放入inline
。
基本上,我想添加一个找到单个换行符的空格,并在找到double的位置添加vbNewLine
。所以我尝试了这个:
If Asc(Mid(inLine, i, 1)) = 10 And Asc(Mid(inLine, (i + 1), 1)) = 10 Then
当单步执行程序时,这似乎有效,但是当代码完成时,我得到运行时错误Invalid procedure call or argument
。
我试过取出括号,使用i = i + 1,i ++,都无济于事。我试图搜索一种使用算术作为参数的方法,但一直无法找到我要找的东西。有没有办法做到这一点?有没有不同的方法来检查for循环之前的下一次迭代?
感谢您的帮助。
答案 0 :(得分:1)
正如其他人所述,使用i+1
,一旦到达字符串的末尾,您将引用一个未存在的索引。
但是使用Replace
可以更轻松地完成您想要的任务。如果您的输入字符串没有双重空格,或者在行的开头或结尾没有尾随空格,那么:
outline = Replace(Replace(inline, vbLf, " "), " ", vbLf)
如果您的情况不符合这些条件,则可以先解决其他Replace
次来电问题。
答案 1 :(得分:0)
i + 1
的mid将在最后一个循环中出错,因为i + 1
指的是字符串末尾之外的字符。你需要做些什么来防止它从字符串的末尾掉下来。
使用Application.Min确保找到结束:
If Asc(Mid(inLine, i, 1)) = 10 And Asc(Mid(inLine, Application.Min(i + 1,Len(inLine)), 1)) = 10 Then