在字段中用逗号分析CSV

我有一个csv文件中的非封闭的字段内的逗号。 我不幸的是必须parsing这个文件,不能用一个格式正确的文件replace它。

我真的不知道从哪里开始。

好。 我看到的是以下内容:您有大约8000行,其中基本上有一个CSV语法错误。 你可以手动确定它们是哪一个,但手动修复8000个条目有点多。

明显的第一种方法是尝试看看你是如何手动确定哪个列有这个问题的。 如果是可以定义规则的东西,那么你就是在做生意。 如果它足够简单,你可以写一个小的文本编辑器macros来通过文件,并为你做。 如果你的文本编辑器不支持macros。 使用awk 。 如果你在Windows上并没有awk ,那就去获取它 。

如果这太复杂了, 解决你的真正问题 。 去解决什么产生这个CSV文件来生成它的权利。 如果是别人的代码,你不能访问,告诉他们修复它。 “你正在生成8000个不可分的条目”在我的书中似乎是一个非常好的论点。 迟早他们可能会生成这个文件的新版本供您处理,所以这真的是正确的事情。

在使用文本编辑器手动分析logging时,可能没有办法做到这一点。 如果没有可辨别的方式将它们与数据中的有效逗号区分,那么逗号分隔符本质上是无用的。

如果你可以从谁创造出一个更清晰的文件,这可能比试图修复你的文件更麻烦。

您可以运行一个excelmacros来重新格式化逗号到其他字符(比如说,$,不在您的文件中),然后一旦您parsing了文件,就可以通过一些代码运行结果来重新格式化字符回到原来的逗号。

编辑:我假设你有访问原始文件看到你在这里标记的Excel?

我认为最好的希望是80%的自动,这意味着你将会做1000多个手动最好的情况。 你只需要聪明的数据在那里。 阅读每一行并计算逗号。 如果数量正确,请将其写入新文件。 如果太多,请将其发送到exception处理程序。

从你完全了解的数据开始。 第一列是TimeStamp吗? 如果你知道的话,你可以从“应该有18的20个逗号”到“应该有17个的19个逗号”。 我知道这并不是完全提升你的精神,而是进步。 有没有一个位置,像植物的名字,在那里? 也许你可以从良好的数据开发一个列表,并在坏的数据中search它。 如果第7栏应该是工厂名称,请查看工厂名称列表,看看是否存在其中一个。 如果是这样,请计算在这个和开始之间以及在这个和结束之间的逗号(或者您已经build立的另一个好的逗号位置)。

如果你有一些独特的数据,你可以用正则expression式来查找它在string中的位置,再次计算逗号前后的位置,看它是否应该在哪里。 就像如果您有纬度/长度读数或99A99-999格式的零件号码。

如果您可以发布五到十行的好数据,也许有人可以build议更具体的方法来确定列和他们的位置。

祝你好运。