我有一个有名称和数字的两列CSV。有些人的名字使用逗号,例如Joe Blow, CFA。这个逗号打破了CSV格式,因为它被解释为一个新列。

我已经读过了,最常见的处方似乎是替换字符,或替换分隔符,用一个新值(例如,这个|那个|the,其他)。

我真的希望保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持)。我还想在名字中保留逗号,因为Joe Blow| CFA看起来很傻。

是否有一种方法在CSV列中包含逗号而不破坏格式,例如通过转义它们?


当前回答

你可以对你的值进行编码,例如在PHP中base64_encode($str) / base64_decode($str)

在我看来,这比双引号等更简单。

https://www.php.net/manual/en/function.base64-encode.php

编码的值永远不会包含逗号,因此CSV中的每个逗号都将是分隔符。

其他回答

您可以使用平面文件连接管理器中的Text_Qualifier字段作为“。这应该用引号来包装您的数据,并且仅用引号外的逗号分隔。

首先,如果项目值有双引号字符("),则替换为2个双引号字符("")

item = item.ToString().Replace("""", """""")

最后,包装项值:

左:带有双引号字符(")

右:带有双引号(")和逗号(,)

csv += """" & item.ToString() & ""","

这不是一个完美的解决方案,但你可以把所有使用逗号的地方都换成,或者更低的引号。它看起来非常非常类似于逗号,并且在视觉上具有相同的目的。不需要报价

在JS中就是这样

stringVal.replaceAll(',', '‚')

不过,在需要直接比较数据的情况下,你需要非常小心

也许不是这里所需要的,但这是一个非常古老的问题,答案可能会帮助到其他人。我发现用不同的分隔符导入Excel的一个技巧是在文本编辑器中打开文件并添加第一行,如下所示:

9月= |

其中|是你希望Excel使用的分隔符。 或者你也可以改变Windows中的默认分隔符,但有点啰嗦:

控制面板>时钟和区域>区域>格式>附加>数字>列表分隔符[由逗号改为您的首选选项]。这意味着Excel也将默认使用所选分隔符导出csv。

如果你想证明你所说的,你可以用引号。就像这样

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

现在,你可以在name变量中使用逗号。