You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在定位到最后一个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",这段代码会:

  1. 定位到最后一个“Dtq”的结束位置
  2. 提取该位置之后的文本" ABC",并捕获其中的“ABC”
  3. 如果后续还有日志条目,会继续遍历并提取所有“ABC”相关内容

内容的提问来源于stack exchange,提问作者Monks Den

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:57:21