2011-03-08 72 views
0

我使用VB6和ADO一起與Microsoft文本驅動程序從一個ASCII文件導入數據。該文件是逗號分隔的,但它也包含圍繞文本數據字段的雙引號。這些字段也是固定的寬度。ADO和Microsoft文本驅動程序 - 字段分隔符問題

我有一個問題,驅動程序錯誤地讀取列時,其中一行包含引號雙引號裏面的內容。這發生在左側第二列的「零件描述」欄內。發生這種情況時,右側的列全爲空值,而文本文件中則不是這種情況。

我認爲這將是最好只使用逗號作爲分隔符。但是,我相信逗號也出現在「部分描述」列中,所以這意味着我應該真正加載文件爲固定寬度。我不知道有什麼辦法可以做到這一點,除非我可以在schema.ini文件中指定。

關於如何解決這個任何想法?

編輯:
你被允許在你的Schema.ini文件指定固定的寬度。但是,在我看來,作爲分隔符/限定符存在的逗號和引號會阻止它正常工作。看起來我可能必須「手動」讀取文件,並在使用MS Text驅動程序加載之前以我自己的格式將其寫回。仍在尋找其他意見。

+0

如果您將報價和撇號稱爲撇號,則更容易清楚。 「雙引號」表示連續兩個引號,例如「」。 – Bob77 2011-03-08 23:56:37

+0

這將是非常棘手的重新分析和重新格式化。如果你試圖忽略引號作爲文本分隔符,那麼值中的嵌入逗號會讓你感到興奮。 – Bob77 2011-03-09 00:02:33

+0

很高興你能看到鮑勃的困境。看起來下面的兩個答案忽略了我對這個文件有多個分隔符和固定寬度。 – HK1 2011-03-10 04:06:16

回答

0

我會嘗試更改註冊表中的Format Jet文本引擎的值(如果這就是您正在使用的)密鑰HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text。我認爲默認值是CSVDelimited,但您可以將其更改爲FixedLength。見http://msdn.microsoft.com/en-us/library/ms974559.aspx

這也許值得補充的是,雖然你有一個Schema.ini文件設置,對一些選項註冊表否決他們無論如何

其實,看着我提供的鏈接,看來你使用用於固定長度文件的schema.ini文件。你有沒有嘗試過下面的東西,它指定了寬度?

[Test.txt的]

格式=定長

Col1中=姓文本寬度7

= Col2中名字文本寬度10

COL3 = ID文本整數3

+0

我瞭解它的方式,在這個文件中作爲分隔符的逗號會導致數字/價格字段出現問題。固定寬度不允許您指定每個字段的起始位置和結束位置,因此省略了分隔符。或者至少我不知道有這樣的功能。 – HK1 2011-03-08 13:17:25

0

我對區域設置格外謹慎 - 一些用戶更改默認列表分隔符。 Usualy使用schema.ini來解決這個問題,如下所示:

[MyFile.csv] 
Format=Delimited(,)