MS Access 捕获特定的文本组,追加并循环到长文本字段中的下一部分

MS Access capture certain group of text, append, and loop onto next section in a long text field

我有一个很长的文本字段(称为 "reporttext"),有人正在导入一堆需要分开并附加到另一个 table 的文本。对于每种情况,都有一个“[]”字符来分隔每种情况。我希望我的代码查找第一个 [] 和第二个 [],将文本附加到另一个 table,然后循环。所以下一个案例是第二个 [] 和第三个 [] 之间的文本。

这是我的字符串

报告文本: [] ksfjjls [] 42244 [] @@@@

我希望它附加到一个名为 "notes" 的新 table 中,它应该是这样的:

报告文本
ksfjjls
42244
@@@@

我使用了一个宏来计算文本文件中 [] 的数量,以了解 运行 循环的次数,但是这个以及我的其余代码并没有发生。我知道我的代码是错误的,但我知道通过一些调整它会到达那里。任何帮助表示赞赏。

lengthofnote = Len([reporttext])
start = InStr([reporttext], "[]")
startplus3 = [start] + 3
'find number of cases
firstcase = 1
numcases = StringCountOccurrences([reporttext], "[]")
Dim LCounter As Integer

  For LCounter = [firstcase] To [numcases]
    revisedreporttext = Mid([reporttext], [startplus3], [lengthofnote])
    secondposition = InStr([revisedreporttext], "[]")
    nextreporttext = Mid([reporttext], [startplus3], [secondposition])
    Add_reporttext = "INSERT INTO notes(reporttext) values ('" & nextreporttext & "');"
    DoCmd.RunSQL Add_reporttext  
    firstcase = firstcase + 1
    startplus3 = secondposition
    secondposition = secondposition + 4
  Next LCounter

@Zev Spitz 是正确的,因为您可以使用 Split() 来完成此操作。你可以使用这样的东西

Option Compare Database
Option Explicit
Sub SplitLongTextField()
    Dim rs As Recordset
    Dim reportTextArr
    Dim qString As String
    Dim i As Long


    qString = "SELECT [reporttext] FROM [Table1]" '<- replace [Table1] with the name of your table with the Long Text field

    Set rs = CurrentDb.OpenRecordset(qString)

    If Not rs.EOF Then
        reportTextArr = Split(rs.Fields("reporttext"), "[]")
    End If

    For i = LBound(reportTextArr) To UBound(reportTextArr)
        If Not reportTextArr(i) = "" Then
            DoCmd.RunSQL "INSERT INTO notes(reporttext) VALUES('" & reportTextArr(i) & "');"
        End If
    Next i

    rs.Close

End Sub

如果您需要对初始 table 中的多条记录执行此操作,那么您可以遍历整个 table 并像

一样循环操作
Option Compare Database
Option Explicit
Sub SplitLongTextField()
    Dim rs As Recordset
    Dim reportTextArr
    Dim qString As String
    Dim i As Long


    qString = "SELECT [reporttext] FROM [Table1]" '<- replace [Table1] with the name of your table with the Long Text field

    Set rs = CurrentDb.OpenRecordset(qString)

    Do Until rs.EOF
        reportTextArr = Split(rs.Fields("reporttext"), "[]")

        For i = LBound(reportTextArr) To UBound(reportTextArr)
            If Not reportTextArr(i) = "" Then
                DoCmd.RunSQL "INSERT INTO notes(reporttext) VALUES('" & reportTextArr(i) & "');"
            End If
        Next i

        rs.MoveNext
    Loop

    rs.Close

End Sub

假设字符串总是以 [] 开头并且首选 return 单个字符串,请考虑:

Replace(Mid(reporttext, 4), "[] ", vbCrLf)