【发布时间】:2019-01-31 21:11:02
【问题描述】:
当我开始保存 CSV 文件时,我注意到行并非总是由逗号 (,) 分隔,而是由分号 (;) 分隔。有没有办法在 C# 中记录它,无论它是分号还是逗号,它都应该将单元格分隔成不同的字符串。
我有一个包含 2 列的模板:名称、属性
名称非常简单,但属性可能包含多个以逗号分隔的值。
例子:
Name1; Property1, Property2, Property3
Name2; Property2, Property3
Name3; Property1
现在我需要了解的是:C# 是否有一个函数可以识别单元格分割符号,因为它可能是 (,) 或 (;)? 如果相同的数据用逗号表示:
Name1, Property1, Property2, Property3
Name2, Property2, Property3
Name3, Property1
我应该如何通过分离而不得到比我需要的更多的列,或者这是否可能?
【问题讨论】:
-
您可以使用
str.Split(',',';')。但是,您确定这些字段不包含两个分隔符之一吗? -
如果我们将您的问题概括为“如何拆分由多个字符组成的字符串”答案是基本的,Split 方法将一个 char 数组作为拆分字符,因此您可以使用任何您想要的。
-
string.Split(';', ',');但是..Stop Rolling Your Own CSV Parser! -
只是为了详细说明Reniuz所说的,自己解析CSV文件是个坏主意!事实上,CSV 经常被误用,这使得它们在我看来是一种糟糕的格式。如果输出旨在供人使用,则 Open Office XML 电子表格 (.xlsx) 文件更合适。如果它的目的是在程序之间传递数据,那么 XML 或 JSON 是不错的选择。
-
您要编写 CSV 以便 Excel 可以读取它吗?如果是这样,Excel 使用基于区域性的分隔符(例如 de-de 中的;)。您可以通过 System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator 获得相同的分隔符 请注意,您必须在字段的文本中转义该分隔符(或始终正确地转义该字段)。如果您想阅读它,您无法确定使用了哪个分隔符。