【问题标题】:ADO and Microsoft Text Driver - Field Delimiter ProblemADO 和 Microsoft 文本驱动程序 - 字段分隔符问题
【发布时间】:2011-03-08 12:14:55
【问题描述】:

我正在使用 VB6 和 ADO 以及 Microsoft 文本驱动程序从 ASCII 文件中导入数据。该文件以逗号分隔,但它还包含文本数据字段周围的双引号。这些字段也是固定宽度的。

我遇到了一个问题,即驱动程序在任何时候其中一行在内容中包含引号 双引号 时都会错误地读取列。这发生在左侧第二列的“部件描述”列中。出现这种情况时,右边的列都是 Null 值,而在文本文件中不是这样。

我认为最好只使用逗号作为分隔符。但是,我相信逗号也出现在“部件描述”列中,所以这意味着我应该真正将文件加载为固定宽度。我不知道有什么方法可以做到这一点,除非我可以在 schema.ini 文件中指定。

关于如何解决这个问题的任何想法?

编辑:
您可以在 Schema.ini 文件中指定固定宽度。但是,在我看来,也作为分隔符/限定符存在的逗号和引号会阻止它正常工作。看起来我可能必须“手动”读入文件并以我自己的格式写回,然后再使用 MS Text 驱动程序加载它。仍在寻找其他意见。

【问题讨论】:

  • 如果将引号称为引号而将撇号称为撇号,则更容易清楚。 “双引号”是指连续两个引号,例如“”。
  • 这将很难重新解析和重新格式化。如果您尝试忽略引号作为文本分隔符,那么值中嵌入的逗号会让您感到困惑。
  • 很高兴你能看到 Bob 的困境。似乎下面的两个答案都忽略了我所说的这个文件有多个分隔符和固定宽度。

标签: vb6 ado text-files text-driver


【解决方案1】:

我会尝试更改注册表中的 Format 键值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text 处的 Jet 文本引擎(如果您正在使用)。我认为默认值为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

【讨论】:

  • 按照我的理解,这个文件中作为分隔符的逗号会导致数字/价格字段出现问题。固定宽度不允许您为每个字段指定起始位置和结束位置,因此省略了分隔符。或者至少我不知道有任何此类功能。
【解决方案2】:

我对区域设置格外谨慎——一些用户更改了默认列表分隔符。通常使用schema.ini 解决这个问题,如下所示:

[MyFile.csv]
Format=Delimited(,)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多