csv 文件中单元格内的字段和文本分隔符
Field and text delimiters within cells in csv files
这可能是一个非常基本的问题,尽管我尝试过,但仍无法找到令人满意的答案。如果您对背景不感兴趣,请随时跳到最后的问题。
任务:
我希望为我的统一项目创建一个简单的本地化解决方案。经过一些初步研究后,我得出结论,最好使用 streamreader 读取的 .csv 文件,这样翻译人员就只需要与 csv 交互 table,信息组织得井井有条。
主要问题:
由于文本的性质,我需要考虑实际字段中的换行符和特殊字符。因此我不能使用普通的 readLine() 方法。
这是我通过使用 Read() 并检查换行符是否在文本分隔符括号内来处理的。但是当我检查文本分隔符时,我担心它可能 运行 进入普通单元格文本的未转义分隔符部分(因为普通文本分隔符是引号)。
所以我把分隔符换成了 §。但现在每次打开文件时,我都必须在 OpenOfficeCalc 中重新输入 § 作为文本分隔符,这可能是由于编码差异所致。这很烦人,但不是世界末日。
我的问题:
OpenOffice(或类似软件)通常如何区分单元格内的 commas/quotation 标记和用作分隔符的标记?如果我知道这一点,我可能会在阅读文件时采用类似的方法。
我试着用 NotePad++ 查看文件,发现换行符的不同(/r 而不是 /r/n),显然它在文本分隔符括号内,但是当涉及到它如何分隔时它的分隔符与刚刚在 text/field 中输入的分隔符,我正在画一个空白。
OpenOffice Calc 中的翻译文件:
NotePad++ 中的翻译文件,显示所有字符:
我将不胜感激有关该主题的任何见解或链接。
来自https://en.wikipedia.org/wiki/Comma-separated_values:
The CSV file format is not fully standardized. The basic idea of separating fields with a comma is clear, but that idea gets complicated when the field data may also contain commas or even embedded line breaks.
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]
这可能是一个非常基本的问题,尽管我尝试过,但仍无法找到令人满意的答案。如果您对背景不感兴趣,请随时跳到最后的问题。
任务:
我希望为我的统一项目创建一个简单的本地化解决方案。经过一些初步研究后,我得出结论,最好使用 streamreader 读取的 .csv 文件,这样翻译人员就只需要与 csv 交互 table,信息组织得井井有条。
主要问题:
由于文本的性质,我需要考虑实际字段中的换行符和特殊字符。因此我不能使用普通的 readLine() 方法。 这是我通过使用 Read() 并检查换行符是否在文本分隔符括号内来处理的。但是当我检查文本分隔符时,我担心它可能 运行 进入普通单元格文本的未转义分隔符部分(因为普通文本分隔符是引号)。
所以我把分隔符换成了 §。但现在每次打开文件时,我都必须在 OpenOfficeCalc 中重新输入 § 作为文本分隔符,这可能是由于编码差异所致。这很烦人,但不是世界末日。
我的问题:
OpenOffice(或类似软件)通常如何区分单元格内的 commas/quotation 标记和用作分隔符的标记?如果我知道这一点,我可能会在阅读文件时采用类似的方法。
我试着用 NotePad++ 查看文件,发现换行符的不同(/r 而不是 /r/n),显然它在文本分隔符括号内,但是当涉及到它如何分隔时它的分隔符与刚刚在 text/field 中输入的分隔符,我正在画一个空白。
OpenOffice Calc 中的翻译文件:
NotePad++ 中的翻译文件,显示所有字符:
我将不胜感激有关该主题的任何见解或链接。
来自https://en.wikipedia.org/wiki/Comma-separated_values:
The CSV file format is not fully standardized. The basic idea of separating fields with a comma is clear, but that idea gets complicated when the field data may also contain commas or even embedded line breaks.
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]