【问题标题】:Understanding this CSV header了解此 CSV 标头
【发布时间】:2011-06-04 16:14:25
【问题描述】:

我需要解析一个包含此标题的 CSV 文件:

Company;Registered office;Notifying party;Domicile or Registered office;Holdings of voting rights;;;;;;Publication

;;;;directly held;;additionally counted;;total;;in Germany;;in foreign countries

;;;;percentage;single rights;percentage;single rights;percentage;single rights;Official stock exchange

我想知道这是否是标准标题格式,因为我希望所有字段都一个接一个地列出,例如(在第一行)“持有投票权 - 直接持有 -百分比;持有投票权-直接持有-单一权利”,而我看到该信息分布在三行上。

目前我的文件有 6 行标题(显示的三行和另一种语言的其他三行),我如何检测,如果有一天他们会添加更多标题行?? 该文件继续以下行(第一个数据),依此类推。第一行真实数据并不总是相同的

BBS Kraftfahrzeugtechnik AG;Schiltach;Baumgartner, Heinrich;Deutschland;62,5;;37,5;;100,0;;Börsenzeitung;04.04.2002

我也在寻找能够解析 CSV 文件的 java 库

【问题讨论】:

    标签: java parsing csv


    【解决方案1】:

    尽管 CSV(逗号分隔值)文件的名称中有逗号,但我在企业界看到了一些非常奇怪的东西。

    我建议创建您自己的数据表示。听起来您可能正在读取多个格式不同的文件?

    我会以模块化的方式解决这个问题。拥有不同格式的导入器,将其引入规范化的数据表示,而不是做你想做的。

    这一切都假设这些文件包含相同类型的数据,并且您无法控制所接收的文件。

    即使情况并非如此,从其表示中提取数据并将其粘贴到单独的项目中也会很有用。

    我也推荐使用OpenCSV

    【讨论】:

    • 感谢您关于抽象数据的建议,因为这是我已经在做的 :)
    【解决方案2】:

    至于 CSV 标头,没有标准格式。在所有情况下,我们都假设第一行是标题。如果标题跨越多行(我在这里第一次看到),那么在开始解析此文件之前,您需要知道标题列的数量。至少这是一个开始。

    csv 文件中的下一个假设通常是一行是一行或一条记录。所以通常标题和数据由换行符分隔。就您而言,我不确定您是如何生成文件以及计划如何使用它的。

    【讨论】:

    • It is CSV,分隔符为;。逗号 (,) 不是严格要求的分隔符,它几乎总是与十进制值冲突。
    • CSV 分隔符可能因地区而异。 OP 来自德国,逗号是小数点分隔符(几乎整个欧洲)(在英国/美国是“.”),分号用作 CSV 中的分隔符。见en.wikipedia.org/wiki/Comma-separated_values
    • @Andreas_D, @Nivas - 这对我来说是新事物。多谢你们。已编辑我的答案以删除该 csv 语句。
    【解决方案3】:

    是的,您有一个合法的 CSV 文件。我通过 Excel 成功读取了它,并且怀疑我对 OpenOffice 没有任何问题。对于 Excel,我将其保存为 .txt 文件,但随后不得不在开始的对话框中告诉 Excel 它是用分号分隔的。

    这是“标准”,因为它用分隔符分隔列(分号可以,制表符也可以,当然还有逗号),行用换行符分隔。

    之所以为您提供这种格式,是因为第二和第三行标题不直接位于第一行之下。 “投票权持有量”共6栏。在其下方,在第二个标题行上,“直接持有”跨越 2 列,“附加计数”和“总计”也是如此。第三个标题行将第二个标题行细分为“百分比”和“单一权限”。

    我认为您不会轻易找到标题何时停止而数据何时开始。这是一个语义问题——意义之一。不过,这对人类来说更容易!

    【讨论】:

      【解决方案4】:

      我不同意其他声称只允许使用逗号的人。例如,Wikipedia 给出了一个德语 CSV 的例子,它使用分号进行 CSV 分隔(因为逗号用于小数分隔)。我认为 MS Excel 在使用什么分隔符方面也非常灵活。只是程序员的头脑会倾向于最简单的情况。

      对于 CSV 解析,我推荐 Ostermiller Utils

      Q>我如何检测,如果有一天他们会添加更多的标题行?
      A> 你不能。您唯一可以依赖的是动态布局(您提前知道列名)或静态布局(您假设此列始终是第 n 个)。

      【讨论】:

        【解决方案5】:

        没有标准的标题格式。可以将第一行视为一种约定,即表示列标题的值的逗号分隔列表。

        在您的情况下,您的表格有三个标题行(我的猜测是基于计数单元格并与您的数据示例的内容进行比较)。

        它仍然是 csv,但您事先不知道哪一行是保存实际数据的第一行。格式本身没有给出任何线索。

        【讨论】:

        • 我自己下载了我所指的文件,并且我确定“标题”行的末尾有回车符 (^M)....所以,这似乎是奇怪的标题,类似于标题的东西。逗号是分号,因为逗号在文本中使用
        【解决方案6】:

        【讨论】:

          【解决方案7】:

          这不是 CSV 文件。您需要从生成文件的人那里获取文件的规范。

          CSV 文件是逗号分隔值,每行一条记录。关于如何转义逗号和转义字符,这是一个松散的规范。 Excel 在值周围使用双引号,然后双引号。

          【讨论】:

          • 记录是每行一个...似乎只有标题很“奇怪”
          • CSV 没有“标题”只有行。行可以包含标题或数据或用于任何其他目的。
          • Openoffice让我在打开文件的时候选择分隔符,分号也可以用
          • 除空行外,文件为CSV格式,分隔符为;。逗号 (,) 不是严格要求的分隔符,它几乎总是与十进制值冲突。
          猜你喜欢
          • 2019-10-08
          • 2011-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-02
          • 1970-01-01
          • 1970-01-01
          • 2014-12-15
          相关资源
          最近更新 更多