我試圖通過線加載到數據庫行的文本文件,意味着每一行都有一個不同的列數,我不能用一個標準的導入方法作爲文件的故障,然而,它是由逗號分隔的。的MS Access分割功能與封閉的文本
我試圖使用「分割」功能,這樣我可以從每一行中提取某些信息,遺憾的是任何文本字段「」封閉的,有些將包含逗號指定的文本內的。
是否有可能使用拆分函數並忽略任何落在封閉文本中的逗號,如果不是那麼我很樂意編寫一個自定義函數,但是否可以確定文本字符串是否被「」括起來?
感謝&親切的問候,
馬特。
我試圖通過線加載到數據庫行的文本文件,意味着每一行都有一個不同的列數,我不能用一個標準的導入方法作爲文件的故障,然而,它是由逗號分隔的。的MS Access分割功能與封閉的文本
我試圖使用「分割」功能,這樣我可以從每一行中提取某些信息,遺憾的是任何文本字段「」封閉的,有些將包含逗號指定的文本內的。
是否有可能使用拆分函數並忽略任何落在封閉文本中的逗號,如果不是那麼我很樂意編寫一個自定義函數,但是否可以確定文本字符串是否被「」括起來?
感謝&親切的問候,
馬特。
非常感謝mwolfem我抱歉地說,我沒有測試你的代碼還沒有,但我的情況下,我在尋找來接從我的字符串值一定不打印整條生產線,多一點研究,我已經爲別人工作的解決方案誰是疲於應付不過之後這個問題,如下:
一個模塊中創建該第一功能:
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
我不認爲這是可能的Split
功能來做到這一點。我其實最近也在嘗試做同樣的事情(但用圓括號而不是引號)。我有我寫的自定義函數,我推廣接受任何分隔符和任意數量的「引用字符」對;例如,()[] {} 「」 等
Function SplitUnquotedSections(Text As String, Delimiter As String, _
ParamArray QuotePairs()) As Collection
Dim Char As String, Word As String, i As Integer, Pos As Long, Unquote As String
Set SplitUnquotedSections = New Collection
For Pos = 1 To Len(Text)
Char = Mid(Text, Pos, 1)
If Len(Unquote) = 0 Then
If Char = Delimiter Then
SplitUnquotedSections.Add Word
Word = ""
Else
For i = LBound(QuotePairs) To UBound(QuotePairs) Step 2
If Char = QuotePairs(i) Then
Unquote = QuotePairs(i + 1)
Exit For
End If
Next i
Word = Word & Char
End If
Else
Word = Word & Char
If Char = Unquote Then
Unquote = ""
End If
End If
Next Pos
If Len(Word) > 0 Then SplitUnquotedSections.Add Word
End Function
該函數返回一個集合,因此會使用這樣的:
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