我正在使用VB6和ADO以及Microsoft文本驱动程序从ASCII文件导入数据。该文件以逗号分隔,但它还包含文本数据字段周围的双引号。字段也是固定宽度。
我遇到的问题是,只要其中一行在内容中包含引号双引号,驱动程序就会错误地读取列。这发生在“零件描述”列中,该列是左侧的第二列。发生这种情况时,右侧的列都是Null值,而文本文件中则不是这样。
我认为最好只使用逗号作为分隔符。但是,我相信逗号也出现在“部分描述”列中,这意味着我应该将文件加载为固定宽度。除非我可以在schema.ini文件中指定它,否则我不知道有任何方法可以执行此操作。
有关如何解决此问题的任何想法?
修改
您可以在Schema.ini文件中指定固定宽度。但是,在我看来,作为分隔符/限定符存在的逗号和引号将阻止它正常工作。看起来我可能必须“手动”读取文件并以我自己的格式将其写回来,然后再使用MS Text驱动程序加载它。还在寻找其他意见。
答案 0 :(得分: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 = FirstName文字宽度7
Col2 = LastName文字宽度10
Col3 = ID文本整数3
答案 1 :(得分:0)
我对区域设置更加谨慎 - 一些用户更改默认列表分隔符。通常使用schema.ini
解决此问题:
[MyFile.csv]
Format=Delimited(,)