1

我获得了包含需要加载到 postgres 数据库中的数据的文本文件。

这些文件以记录(每行一个)的形式结构化,字段由波浪号 (~) 分隔。不幸的是,有时字段内容会包含一个波浪号。

由于文件不是整齐的 CSV,并且波浪号没有转义,这会导致记录包含太多字段,从而导致数据库抛出异常并停止加载。

我知道记录应该是什么样子(文本、整数、浮点字段)。

有没有人有关于如何修复超长记录的建议?我用 per 编码,但我对 python、javascript、纯英语的建议感到满意。

4

2 回答 2

1

您可以尝试使用以下内容过滤掉损坏的行:

perl -F'~' -lane 'print if @F > 10' input.txt > broken_fields.txt 

(假设您的最大字段数为 10)。它会给你一个简短的(er)文件,其中包含你可以手动检查的可疑行。这不是一个万无一失的过滤器,它会例如打印出允许的字段,例如带引号的字符串中的波浪线。如果你想要更精确的东西,你可以使用Text::CSV,但是当涉及到损坏的 csv 数据时,这会带来其他困难。

可能有更好的(和自动的)方法来解决这个问题,但是在不知道你的输入是什么样子的情况下,没有办法真正推荐一些东西。

于 2012-09-23T18:02:20.583 回答
0

如果您知道每个字段应该是什么,也许您可​​以编写一个仅匹配该字段类型的正则表达式(忽略波浪号)并捕获匹配项,然后替换文件中的原始字符串?

于 2012-09-23T14:37:59.300 回答