Ms access MS Access拆分函数,包含封闭文本
我试图将文本文件逐行加载到数据库中,我不能使用标准的导入方法,因为文件的分解意味着每行有不同的列数,但幸好它是逗号分隔的 我试图使用“Split”函数,以便从每行提取某些信息,不幸的是,任何文本字段都被“”括起来,有些字段在指定的文本中包含逗号 是否可以使用Split函数并忽略包含在封闭文本中的任何逗号,如果不可以,我很乐意编写一个自定义函数,但是否可以确定文本字符串是否包含在“”中 谢谢和亲切的问候Ms access MS Access拆分函数,包含封闭文本,ms-access,import,split,Ms Access,Import,Split,我试图将文本文件逐行加载到数据库中,我不能使用标准的导入方法,因为文件的分解意味着每行有不同的列数,但幸好它是逗号分隔的 我试图使用“Split”函数,以便从每行提取某些信息,不幸的是,任何文本字段都被“”括起来,有些字段在指定的文本中包含逗号 是否可以使用Split函数并忽略包含在封闭文本中的任何逗号,如果不可以,我很乐意编写一个自定义函数,但是否可以确定文本字符串是否包含在“”中 谢谢和亲切的问候 马特。我认为使用拆分功能不可能做到这一点。我最近也在尝试做同样的事情(但是用括号代替引号)。我
马特。我认为使用
拆分功能不可能做到这一点。我最近也在尝试做同样的事情(但是用括号代替引号)。我有我编写的自定义函数,我将其推广为接受任何分隔符和任意数量的“引用字符”对;例如,(),[],{},“,等等
该函数返回一个集合,因此您可以这样使用它:
Sub TestSplit()
Const TestString As String = """Times Square"", ""New York, NY"", 10011"
Dim Item As Variant
For Each Item In SplitUnquotedSections(TestString, ",", """", """")
Debug.Print Trim(Item)
Next Item
End Sub
"Times Square"
"New York, NY"
10011
非常感谢Mwolffem,很抱歉,我还没有测试您的代码,但在我的例子中,我希望从字符串中选择某些值,而不打印整行,但是,经过一点进一步的研究,我为解决此问题的任何其他人提供了一个可行的解决方案,如下所示:
在模块中创建第一个函数:
Public Function DelimConvertor(varInput As Variant, strDelim As String, strQualifier As String) As Variant
Const strStart = "Ã" 'Ascii 195, or any other Ascii you are unlikely to encounter
Const strEnd = "ž" 'Ascii 158, or any other Ascii you are unlikely to encounter
Const strNewDelim = "§" 'Ascii 167, or any other Ascii you are unlikely to encounter
Dim lngi As Long
Dim strChar As String
Dim flgStart As Boolean
Dim varOutput As Variant
'Format the string so we can distinguish the fields
If Left(varInput, 1) = strQualifier Then
varInput = strStart & Right(varInput, Len(varInput) - 1)
End If
If Right(varInput, 1) = strQualifier Then
varInput = Left(varInput, Len(varInput) - 1) & strEnd
End If
varInput = Replace(varInput, strDelim & strQualifier, strDelim & strStart)
varInput = Replace(varInput, strQualifier & strDelim, strEnd & strDelim)
'Loop through and format the rest of the string
For lngi = 1 To Len(varInput)
strChar = Mid(varInput, lngi, 1)
Select Case strChar
Case strStart
flgStart = True
Case strEnd
flgStart = False
Case Else
If flgStart Then
varOutput = varOutput & strChar
ElseIf strChar = strDelim Then
varOutput = varOutput & strNewDelim
Else
varOutput = varOutput & strChar
End If
End Select
Next
'Return the cleansed stream that can now be used with the Split function
DelimConvertor = varOutput
End Function
然后在文件导入过程中使用它,如下所示:
Public Function Test()
Dim fso As New FileSystemObject
Dim ts As TextStream
Dim strArray() As String
Set ts = fso.OpenTextFile("C:\Users\Admin\Desktop\test.txt", ForReading)
strArray = Split(DelimConvertor(ts.ReadLine, ",", """"), "§")
'Obtain your desired field here e.g. strArray(0)
ts.Close
End Function
Public Function Test()
Dim fso As New FileSystemObject
Dim ts As TextStream
Dim strArray() As String
Set ts = fso.OpenTextFile("C:\Users\Admin\Desktop\test.txt", ForReading)
strArray = Split(DelimConvertor(ts.ReadLine, ",", """"), "§")
'Obtain your desired field here e.g. strArray(0)
ts.Close
End Function