0

私は一日中これを探していました.これは私が見つけた最も近い有用な参考文献です.

私の問題: 巨大なファイルがクローズド システムからインポートされ (ソースで変更することはできません)、インポートする必要があります。これらのファイルは | 区切り、各行の終わりに (最後の行まで) CRLF があります。現在、テキストに CR および CRLF を含むテキストを含めることができる新しいタイプを含めることは面白いことに気付きました (の代わりに<br>)。

したがって、システムでこのファイルを処理する前に行う必要があるのは、先頭に | が付いていないすべての CRLF および CR の出現箇所を置き換えることです。に<br>、すべての行が 000| のようなコードで始まるようにします。... 600|

私がメモ帳で持っている最も近いもの ++: 検索:(?<![\|])[\r\n]+$

交換:<br>

問題は、すべての crlf を与えず、<br>cr の後に 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 
4

2 に答える 2

1

うわー、これは少しの間私を段階的にしました...
1つのパスでそれをするのは難しいです。

N ++の制約により、おそらく必要以上に困難になりますが、必要なことを実行するためのコードを作成することはできませんが、それは良い方法だと思います。

最適かどうかはわかりませんが、このコンボで成功しました。
探す:

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

交換:

$ 1 <br>

置換に$1が必要です。そうしないと、置換された行から文字が失われます。おそらく、必要なものではありません。

理想的には、Perl(私はperlの支持者ではありません、正規表現を処理する他のスクリプト言語が利用可能です...)またはこれを行うための何かを調べる必要があります。

編集:ただの考え。これは、「実際の」行末ではない|CRLFまたは|CRまたは|CRCRを含むファイルのセクションがないことを前提としています。

于 2012-05-29T15:42:48.960 に答える
1

編集:私の最後の提案を破棄しました - うまくいきませんでした

BunjiquoBianco さんが示唆されているように、これは 1 回のパスでは不可能だと思います。

awk を使用できれば、はるかに良いでしょう。Windows を使用している場合は、 http: //gnuwin32.sourceforge.net/packages/gawk.htmを試してください。

awk が実行可能なオプションである場合は、もう一度質問してください。awk の専門家は、コマンド プロンプトからファイル全体を解析するためのワンライナーを提案するでしょう。

awk も高速です。変換がはるかに高速になり、他のスクリプトに簡単に組み込むことができるため、手動の N++ プロセスを削減できます。

于 2012-05-29T15:50:58.787 に答える