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)
我有一个很长的文本字段(称为 "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)