1

既存の perl スクリプトを使用して、制御できないデータベース クエリからのテキスト ファイル出力を処理しています。

データには「|」で区切られたフィールドが含まれていますが、一部のフィールドには「||」が含まれています。空のフィールドはありません。フィールドセパレーターの両側にスペースがあるかもしれませんが、これも削除したいと思います。

「||」を変更する以外に、これを達成する簡単な方法が見つかりません 別のものに変更し、分割後にハックしますが、これは少し重いようです。

ファイルはかなり大きい (通常は最大約 100M)。

split(/ *\| */, $line)'||' 以外での使用 キャラクター。

何か考えてください?

4

3 に答える 3

3
split /\s*(?<!\|)\|(?!\|)\s*/
于 2012-11-01T10:48:45.400 に答える
3

否定的な後読みと先読みを使用して、分割しているの|周りにシンボルがないことを確認できます。|

split / \s* (?<!\|) \| (?!\|) \s* /x
于 2012-11-01T10:49:40.687 に答える
1

Text::CSVまたはTie::Handle::CSVを使用してファイルを実行することを検討してください。テキスト ファイルが適切に作成されている場合、||を含むフィールド 引用されます。

于 2012-11-01T10:50:53.493 に答える