2011-12-12 81 views
2

我正在讀取VB.net中的csv文件並將行保存到SQL數據庫。在我的代碼稍後的一段時間,應用程序中會回顧SQL行,並使用Split函數來獲取「字段」值。分割完成後,逗號作爲分隔符。在字符串中替換逗號,但僅在VB.net中的特定位置

該應用程序處理許多其他文件(包括excel),並且split函數用於所有這些文件。

我現在面臨的問題是我讀取的一個csv文件的字段值以「後跟多個值,以逗號分隔並以另一個字符結尾」開頭。正常讀取csv文件會導致這些單個字段值中的每一個都被視爲單獨的值。希望我有道理?

一個例子行是:

Elker,MissB,"Bus, Taxi, Train, Ferry, Parking, Toll",800253 

那裏應該只被分離以4列,它們就分開,以9列來代替。

我想要做的是在'Bus'之後替換逗號,直到'Toll'爲'?'代替。

我已經嘗試過使用Replace,包括重載的起始位置,但它最終會用'?'替換行中的所有逗號。

嘗試1: '?'

If vstrLine(intStartPos) = "," Then 
    strRetVal = Replace(vstrLine(intStartPos), ",", "?") 
end if 

其中vstrLineElker,MissB,"Bus, Taxi, Train, Ferry, Parking, Toll",800253intStartPos是一個逗號的「

後的第一個實例僅返回而不是將1個逗號替換爲'?'的字符串

嘗試2:

If vstrLine(intStartPos) = "," Then 
    strRetVal = Replace(vstrLine, ",", "?", intStartPos) 
end if 

它返回與全部換成逗號字符串 '?'

+0

使用http://www.filehelpers.com/default.html。它是免費的,並處理這一點。這裏有很多例子!另外,CSV中的引號是表示文本的一種方式,FileHelpers會處理這一點。 – dash

回答

1

可以使用匹配任一引用的值或不含有逗號的值的正則表達式

例:

Dim input As String = "Elker,MissB,""Bus, Taxi, Train, Ferry, Parking, Toll"",800253" 
Dim values As MatchCollection = Regex.Matches(input, "("".*""|[^,]+)") 

For Each value As Match In values 
    Console.WriteLine(value.Value) 
Next 

輸出:

Elker 
MissB 
"Bus, Taxi, Train, Ferry, Parking, Toll" 
800253 
+0

這是一個非常優秀的解決方案。 – UnhandledExcepSean

0

爲什麼重新發明輪子?除非你想做一些非常自定義的東西,否則使用一個已經制作好的CSV閱讀器。我推薦this one

相關問題