我正在寻找关于如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且可能在值中有逗号,如公司名称。
我们正在考虑的一些想法是:带引号的标识符(value "," values ","等等)或使用|代替逗号。最大的问题是我们必须让它变得简单,否则客户就不会这么做。
我正在寻找关于如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且可能在值中有逗号,如公司名称。
我们正在考虑的一些想法是:带引号的标识符(value "," values ","等等)或使用|代替逗号。最大的问题是我们必须让它变得简单,否则客户就不会这么做。
当前回答
我使用papaParse库来解析CSV文件,并拥有键-值对(键/头/ CSV文件-值的第一行)。
下面是我举的例子:
https://codesandbox.io/embed/llqmrp96pm
它有一个dummy.csv文件来演示CSV解析。
我在reactJS中使用过它,尽管它很容易在任何语言编写的应用程序中复制。
其他回答
我知道已经13年了,但我们遇到了类似的情况,客户端向我们输入了一个CSV,值带有逗号,有2个用例:
如果客户端使用windows Excel客户端来编写CSV(通常在windows环境中是这种情况),则会自动将逗号添加到值中。
CSV的实际文本值:
3786962,1st Meridian Care Services,John,"Person A,Person B, Person C, Person D",Voyager
如果客户是通过编程的方式向你发送excel,那么他应该遵循RFC4180并将值用引号括起来。例子:
科尔1,科尔2,a, b, c,科尔4
您可以在字段周围加上双引号。我不喜欢这种方法,因为它增加了另一个特殊字符(双引号)。只需定义一个转义字符(通常是反斜杠),并在需要转义的地方使用它:
data,more data,more data\, even,yet more
您不必尝试匹配引号,而且需要解析的异常也更少。这也简化了您的代码。
首先,让我们问问自己,“为什么我们觉得需要在CSV文件中以不同的方式处理逗号?”
对我来说,答案是:“因为当我将数据导出到CSV文件时,字段中的逗号消失了,我的字段被分隔成多个字段,其中逗号出现在原始数据中。”(这是因为逗号是CSV字段分隔符。)
根据您的情况,分号也可以用作CSV字段分隔符。
根据我的要求,我可以使用一个字符,例如,单个低9引号,它看起来像一个逗号。
所以,下面是你在Go中如何做到这一点:
// Replace special CSV characters with single low-9 quotation mark
func Scrub(a interface{}) string {
s := fmt.Sprint(a)
s = strings.Replace(s, ",", "‚", -1)
s = strings.Replace(s, ";", "‚", -1)
return s
}
Replace函数中的第二个逗号字符是十进制8218。
请注意,如果您的客户端可能只有ascii文本阅读器,那么这个十进制8218字符看起来不会像逗号。如果这是您的情况,那么根据RFC 4128,我建议用逗号(或分号)和双引号包围字段:https://www.rfc-editor.org/rfc/rfc4180
我使用papaParse库来解析CSV文件,并拥有键-值对(键/头/ CSV文件-值的第一行)。
下面是我举的例子:
https://codesandbox.io/embed/llqmrp96pm
它有一个dummy.csv文件来演示CSV解析。
我在reactJS中使用过它,尽管它很容易在任何语言编写的应用程序中复制。
在字符串周围加双引号。这就是Excel所做的。
阿拉伊莱,
将双引号转义为2 双引号。如。 “test1”、“foo”“酒吧”,“test2”