如何在定位到最后一个Dtq后启动循环查找目标字符串ABC?
实现方案
完全可以实现,核心思路是先记录最后一个包含“Dtq”的日志条目,以及该条目里“Dtq”最后一次出现的结束位置,再从这个位置开始往后查找“ABC”。具体代码实现如下:
步骤1:修改原循环,记录关键位置信息
新增变量存储最后一个Dtq的位置信息,同时保留原有的业务逻辑:
' 记录最后一个包含Dtq的日志条目 Dim lastDtqEntry As DataRowView = Nothing ' 记录最后一个Dtq在对应Note中的结束位置(起始索引+字符串长度) Dim lastDtqEndPosition As Integer = 0 For Each LogEntry As DataRowView In orderedLog Dim noteText As String = LogEntry("Note").ToString() Dim dtqIndex As Integer = InStr(noteText, "Dtq") If dtqIndex > 0 Then ' 保留原有的Dtq处理逻辑 TqTechnique = TqTechnique & noteText.Substring(Len("Dtq:")) TqFound = True ' 更新最后一个Dtq的条目和结束位置 lastDtqEntry = LogEntry ' 用InStrRev找到当前Note中最后一次出现Dtq的起始位置 Dim lastDtqStart = InStrRev(noteText, "Dtq") lastDtqEndPosition = lastDtqStart + Len("Dtq") End If Next
步骤2:从最后一个Dtq的位置开始查找ABC
完成第一遍遍历后,分两部分查找ABC:先处理最后一个Dtq所在条目里的剩余文本,再处理该条目之后的所有日志条目:
' 存储找到的ABC内容,可根据需求调整变量类型 Dim abcContent As String = "" If lastDtqEntry IsNot Nothing Then ' 1. 处理最后一个Dtq所在的条目:从记录的结束位置开始查找ABC Dim lastNoteText As String = lastDtqEntry("Note").ToString() If lastDtqEndPosition <= lastNoteText.Length Then Dim remainingText As String = lastNoteText.Substring(lastDtqEndPosition) Dim abcIndex As Integer = InStr(remainingText, "ABC") ' 循环查找当前剩余文本中的所有ABC(可根据需求调整提取逻辑) While abcIndex > 0 ' 示例:提取从ABC开始的内容,你可以根据实际需求修改 abcContent = abcContent & remainingText.Substring(abcIndex) & vbCrLf ' 继续查找下一个ABC的位置 abcIndex = InStr(abcIndex + Len("ABC"), remainingText, "ABC") End While End If ' 2. 处理最后一个Dtq条目之后的所有日志条目 Dim entryIndex As Integer = orderedLog.IndexOf(lastDtqEntry) For i As Integer = entryIndex + 1 To orderedLog.Count - 1 Dim currentEntry As DataRowView = orderedLog(i) Dim currentNote As String = currentEntry("Note").ToString() Dim abcPos As Integer = InStr(currentNote, "ABC") While abcPos > 0 abcContent = abcContent & currentNote.Substring(abcPos) & vbCrLf abcPos = InStr(abcPos + Len("ABC"), currentNote, "ABC") End While Next Else ' 如果没有找到任何Dtq,可根据需求自行处理(比如查找所有ABC或跳过) End If
逻辑说明
针对你给出的示例字符串"Dtq, ABC, Dtq, ABC",这段代码会:
- 定位到最后一个“Dtq”的结束位置
- 提取该位置之后的文本
" ABC",并捕获其中的“ABC” - 如果后续还有日志条目,会继续遍历并提取所有“ABC”相关内容
内容的提问来源于stack exchange,提问作者Monks Den
相关产品推荐
相关产品推荐

