【问题标题】:Field and text delimiters within cells in csv filescsv 文件中单元格内的字段和文本分隔符
【发布时间】:2020-07-06 23:36:24
【问题描述】:

这可能是一个非常基本的问题,尽管我尝试过,但还是找不到令人满意的答案。如果您对背景不感兴趣,请随意跳到最后的问题。

任务:

我希望为我的统一项目创建一个简单的本地化解决方案。经过一些初步研究后,我得出结论,最好使用流式阅读器读取的 .csv 文件,这样翻译人员只需与 csv 表进行交互,其中信息组织得井井有条。

主要问题:

由于文本的性质,我需要考虑实际字段中的换行符和特殊字符。因此,我无法使用正常的 readLine() 方法。 我使用 Read() 并检查换行符是否在文本分隔符括号内。但是当我检查文本分隔符时,我担心它可能会遇到普通单元格内文本的未转义分隔符部分(因为普通文本分隔符是引号)。

所以我将分隔符切换为§。但是现在每次打开文件时,我都必须在 OpenOfficeCalc 中重新输入 § 作为文本分隔符,这可能是由于编码差异。这很烦人,但不是世界末日。

我的问题:

OpenOffice(或类似软件)通常如何区分单元格内的逗号/引号和用作分隔符的逗号/引号?如果我知道这一点,我可能会在阅读文件时采用类似的方法。

我尝试使用 NotePad++ 查看文件,发现换行符(/r 而不是 /r/n)存在差异,显然它位于文本分隔符括号内,但谈到分隔符的方式那些刚刚在文本/字段中输入的,我正在画一个空白。

OpenOffice Calc 中的翻译文件:

NotePad++ 中的翻译文件,显示所有字符:

如果有任何关于该主题的见解或链接,我将不胜感激。

【问题讨论】:

    标签: c# csv unity3d streamreader openoffice-calc


    【解决方案1】:

    来自https://en.wikipedia.org/wiki/Comma-separated_values

    CSV 文件格式未完全标准化。用逗号分隔字段的基本思想很明确,但是当字段数据也可能包含逗号甚至嵌入换行符时,这个想法就会变得复杂。

    LibreOffice Calc 有一种合理的方式来处理这些事情。

    • 在每条记录的末尾使用LF 换行和CR。您的代码似乎已经处理了这个问题。
    • 在需要时使用引号分隔字符串。如果字符串包含一个或多个引号,则复制引号使其成为文字。

    从您问题中的示例来看,您似乎告诉 Calc 不要使用任何引号作为字符串分隔符。你为什么这么做?当我尝试它时,LibreOffice(或 Apache OpenOffice)在打开以这种方式保存的文件后,会在不同的列中显示字段。

    以下示例 CSV 文件的字段包含逗号、引号和换行符。 在 Calc 中查看时:

      A          B
      ---------  --
    1 | 1,",2",  3
      ---------  -- 
    2 | a        c
      | b
    

    Calc 正确读取并保存文件,如下所示。保存时的设置是 Field delimiter ,String delimiter " 这是默认设置。

    "1,"",2"",",3[CR]
    "a
    b",c[CR]
    

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2017-11-03
      • 1970-01-01
      相关资源
      最近更新 更多