我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。
我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。
我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。
是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?
我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。
我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。
我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。
是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?
当前回答
根据您的语言,可能有to_json方法可用。这将避免破坏csv的许多事情。
其他回答
双引号对我没用,它对我有用。”如果你想放置双引号作为例子,你可以设置\"\"。
您可以构建公式,例如:
fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");
将写入csv:
=如果(C3 = 1”“B3)
CSV格式的问题是,没有一个规范,有几个公认的方法,没有办法区分应该使用哪个(用于生成/解释)。我在另一篇文章中讨论了转义字符的所有方法(换行,但基本前提相同)。基本上,它可以归结为为预期用户使用CSV生成/转义过程,并希望其他人不介意。
参考规范文件。
在列文本中转义分隔符和引号的c#方法。这应该是您所需要的,以确保您的csv没有被破坏。
private string EscapeDelimiter(string field)
{
if (field.Contains(yourEscapeCharacter))
{
field = field.Replace("\"", "\"\"");
field = $"\"{field}\"";
}
return field;
}
我发现一些应用程序,如Mac中的Numbers,如果双引号前面有空格,就会忽略它。
A, b,c不行而A, b,c可以。
也许不是这里所需要的,但这是一个非常古老的问题,答案可能会帮助到其他人。我发现用不同的分隔符导入Excel的一个技巧是在文本编辑器中打开文件并添加第一行,如下所示:
9月= |
其中|是你希望Excel使用的分隔符。 或者你也可以改变Windows中的默认分隔符,但有点啰嗦:
控制面板>时钟和区域>区域>格式>附加>数字>列表分隔符[由逗号改为您的首选选项]。这意味着Excel也将默认使用所选分隔符导出csv。