如何有条件地从文本文件中删除 CRLF,最好是在记事本 ++ 中



我已经找了一整天了,这是我找到的最接近的有用参考。

我的问题:大文件是从封闭系统导入的(无法在源头更改),需要导入。这些文件是 |分开并在每行末尾有一个 CRLF(直到最后一个)。现在他们发现在文本中包含带有CR和CRLF的文本的新类型很有趣(<br>)。

因此,在我可以在我们的系统中处理此文件之前,我需要做的是替换所有前面没有 | to <br> ,以便每一行都以 000|...600|

我在记事本++中最接近的:查找: (?<![|])[rn]+$

替换:<br>

优点是它不会为每个crlf提供<br>,错过了一个又一个crlf...其他选择 |crlf 的尝试也完全忘记了 CR。

任何想法都非常感谢。请记住,该文件可能超过500MB(使事情变得有点复杂)

文件摘录:

000|709076|153943|11||1|CRLF 
300|709076|153943|11|4|20000729||Majo509|CRLF 
500|709076|153943|11|6|3-3BNME|20000729|||21.13|4||20120509|CRLF 
600|709076|153943|11||SBV|7103||||20120509|CRLF 
600|709076|153943|11||SBV|7105||||20120509|CRLF 
600|709076|153943|11||SBV|7607||||20120509|CRLF 
600|709076|153943|11||MC||EVALUATIEROOSTER NIET INGEVULD :CR
CRLF 
------------------------------CR
CRLF 
CRLF 
Gezien U het evaluatierooster niet heeft ingevuld, blijft CR
CRLF 
CRLF 
|||20120509|CRLF 
600|709076|153943|11||SBV|7517||||20120509|CRLF 
000|709209|154072|9||1|Dne|LA1349|3100||L|20120509|CRLF 
300|709209|154072|9|3|20HEM-AT20120509|CRLF 
500|709209|154072|9|6|3-3BNME|20000908|||15.4|3||20120509|CRLF 
600|709209|154072|9||SBV|7103||||20120509|CRLF 
600|709209|154072|9||MC||AFSCHAFFING VAN DE EVOOR HET CR
CRLF 
(DE) GEBOUW(EN) CR
CRLF 
CR
CRLF 
indien U huurder of gebruiker bent.|||20120509|CRLF 
600|709209|154072|9||MC||DIEFSTAL  CRLF 

所需结果:(粗略复制粘贴作业;))

000|709076|153943|11||1|CRLF 
300|709076|153943|11|4|20000729||Majo509|CRLF 
500|709076|153943|11|6|3-3BNME|20000729|||21.13|4||20120509|CRLF 
600|709076|153943|11||SBV|7103||||20120509|CRLF 
600|709076|153943|11||SBV|7105||||20120509|CRLF 
600|709076|153943|11||SBV|7607||||20120509|CRLF 
600|709076|153943|11||MC||EVALUATIEROOSTER NIET INGEVULD :<BR><BR>---------------------<BR><BR><BR>Gezien U het evaluatierooster niet heeft ingevuld, blijft <BR><BR>||20120509|CRLF 
600|709076|153943|11||SBV|7517||||20120509|CRLF 
000|709209|154072|9||1|Dne|LA1349|3100||L|20120509|CRLF 
300|709209|154072|9|3|20HEM-AT20120509|CRLF 
500|709209|154072|9|6|3-3BNME|20000908|||15.4|3||20120509|CRLF 
600|709209|154072|9||SBV|7103||||20120509|CRLF 
600|709209|154072|9||MC||AFSCHAFFING VAN DE EVOOR HET <BR><BR>(DE) GEBOUW(EN) <BR><BR><BR><BR>indien U huurder of gebruiker bent.|||20120509|CRLF 
600|709209|154072|9||MC||DIEFSTAL  CRLF 

哇,这个让我分阶段了一段时间......
一次性完成是很棘手的。

N++ 约束可能使它比需要的更难,但我想,如果没有编写一些代码来做你想做的事情,这是一个不错的方法。

虽然我不确定它是否最佳,但我在这个组合上取得了成功。
找到:

([^|])\r([\r])*

取代:

$1<溴>

您需要替换 1 美元,否则您从替换的行中丢失了一个字符 - 可能不是您想要的!

理想情况下,你应该研究一些Perl(我不是perl的倡导者,其他处理正则表达式的脚本语言是可用的......)或一些东西来做到这一点。

编辑:只是一个想法。这假设您的文件中不会有包含 |CRLF 或 |CR 或 |CRCR不是"真正的"行尾。

编辑:取消了我最后的建议 - 不起作用

正如BunjiquoBianco所建议的那样,我认为这不可能一蹴而就。

如果你能使用awk会好得多。如果您使用的是 Windows,请尝试 http://gnuwin32.sourceforge.net/packages/gawk.htm

如果 awk 是一个可行的选择,请重新提出问题,awk 坚果可能会建议从命令提示符使用单行来解析整个文件。

awk 也很快 - 会给你一个更快的转换,并且可以更容易地包含在其他脚本中,从而减少任何手动的 N++ 过程。

最新更新