我使用大数据,尤其是文本文件。这些记录具有固定数量的列 (19 col)。如果记录扭曲,则它变得不完整,并且溢出的字段形成不完整的新记录,如下所示。
我需要取消扭曲记录,以便它们适合用分号分隔的各自列。这些文件最多可以有 250,000 条记录。一种更快的检查/修复此问题的方法将不胜感激。
谢谢你。
UltraEdit 论坛包含主题
在 CSV 文件中查找一行中包含少于或多于 X 个选项卡的行
其中讨论了 CSV 文件中的这个常见问题。
使用 Perl 正则表达式搜索字符串^((?!(?:[^;\r\n]*;){18}).*)\r*\n
并\1
用作替换字符串,您可以消除少于 18 个分号(19 个数据列)的行上的换行符。
但手动运行此替换,而不是全部替换。使用全部替换时,所有具有多个换行符的数据行的格式都会错误。
例子:
a1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;1
8;19
b1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
c1;2;3;4;5;6;7;8;9;1
0;11;12;13;14;15;16;17;1
8;19
d1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
应该成为
a1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
b1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
c1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
d1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
并不是
a1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
b1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
c1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;1
8;19d1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19
因此,如果数据行有多个换行符,请在逐步执行替换期间将文件中的插入符号设置回上面的行。
使用 UltraEdit 宏,可以自动修复数据行中的所有换行符。
宏代码为:
InsertMode
ColumnModeOff
HexOff
Top
PerlReOn
Loop 0
Find MatchCase RegExp "^((?!(?:[^;\r\n]*;){18}).*)\r*\n"
Replace "\1"
IfFound
Key HOME
Else
ExitLoop
EndIf
EndLoop
Top
通常在 Notepad++ 中,您会转到菜单View
并取消选择该Word wrap
选项。
但是从您的屏幕截图来看,似乎更像是在数据中插入换行符的问题。例如在第 10 行和第 11 行之间,看起来好像在第 18 列插入了换行符。转到View
> Show Symbol
>Show All Characters
来验证这个假设。这也可以解释为什么两个编辑器都有相同的问题。