Ms access MS Access拆分函数,包含封闭文本

Ms access MS Access拆分函数,包含封闭文本,ms-access,import,split,Ms Access,Import,Split,我试图将文本文件逐行加载到数据库中,我不能使用标准的导入方法,因为文件的分解意味着每行有不同的列数,但幸好它是逗号分隔的 我试图使用“Split”函数,以便从每行提取某些信息,不幸的是,任何文本字段都被“”括起来,有些字段在指定的文本中包含逗号 是否可以使用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