.csv文件似乎有一个隐藏的分隔符 – 由Excel识别,但不记事本(和其他程序)

我收到了一个.csv文件。 当我用记事本打开这个文件时,所有的信息都显示在一行中:

 Email;Cityjohnsmith@live.com;New York 

但是,当我用MS Excel打开文件时,它正确显示信息。 我怎样才能识别分隔符? 因为应该读取此文件的第三个程序无法识别分隔符。

所以你的CSV不是逗号分隔是什么似乎是问题。

从记事本副本中查看的方式是数据由分隔符“;”分隔。 这意味着每条数据不是由典型的逗号(,)字符分隔的,而是由分号(;)分隔的。 这就是为什么记事本,只是查看原始文本数据显示不同的结果比MS-Excel试图成功地find一个半共同的定界值在文件上显示结果。

你可能会得到很好的服务: A)编写你的代码,把分隔符识别为分号,而不是逗号,或者B)通过使用你的一个工具来做一个replace来摆脱分号逗号的地方。

.csv最初是指以逗号分隔的值(csv)。 但是,可以使用任何字符来分隔值,最常用的分隔符是逗号,制表符,分号和冒号。 如果数据是由另一个应用程序生成的,则可能需要接受分号作为分隔符。

我不确定我是否会按照你所描述的来编写代码。 如果我被迫编写代码,我会写一个简短的awk脚本来删除隐藏的(即非打印的)字符。

我使用两个工具来处理csv问题。 来自SweetScape Software Inc.的010编辑器将以hex显示文件,因此您可以看到任何不可显示的字符。 另一个来自delimitware.com的Delimit非常适合显示列。 在我看来,010编辑会让你的问题(和解决scheme)显而易见。

下面是一个示例awk脚本,它将非打印字符注入到文本中。 然后使用正则expression式来删除非打印字符。

 BEGIN { t=sprintf("%s\a%s\v%s", "Email;","Cityjohnsmith@live.","com;New York"); print "Input :", t; gsub(/[^\x20-\x7E]/, "", t); print "Result:", t; } 

要运行上面的代码,请使用以下命令:

 awk -f xx.awk 

上面的代码放在一个名为xx.awk的文本文件中。

正则expression式/ [^ \ x20- \ x7E] /标识所有不可打印的字符(即不在'空格'和ASCII之间的波形符号之间)。

awk gsub语句search符合正则expression式的所有字符并将其删除。