2011-11-26 41 views
0

我試圖通過線加載到數據庫行的文本文件,意味着每一行都有一個不同的列數,我不能用一個標準的導入方法作爲文件的故障,然而,它是由逗號分隔的。的MS Access分割功能與封閉的文本

我試圖使用「分割」功能,這樣我可以從每一行中提取某些信息,遺憾的是任何文本字段「」封閉的,有些將包含逗號指定的文本內的。

是否有可能使用拆分函數並忽略任何落在封閉文本中的逗號,如果不是那麼我很樂意編寫一個自定義函數,但是否可以確定文本字符串是否被「」括起來?

感謝&親切的問候,

馬特。

回答

0

非常感謝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 
0

我不認爲這是可能的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