Уберите неправильно расположенные CR + LF в текстах - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть TXT-файл, который я хочу импортировать в Excel для изучения.Но перед импортом я борюсь с форматом текста.Это полная неразбериха, задница, которую вы видите:

| 1020941333    |     569|SP    |500000343 | 9|18.05.2011|15:27:00|18.05.2011|
18.05.2011|Y-0444871-ENCR    |           1,93 |BRL  |8000800000  |
Juros, Comissões e T       |                  |           |
                                        |    |          |     |
                     |CLB082902  |     |     |                 |COEL  |COEL  |
Y-0444871               |
| 1020941586    |      43|SP    |500000344 |43|18.05.2011|15:41:43|18.05.2011|
18.05.2011|B-0447039-ENCR    |           9,02 |BRL  |8000800000  |
Juros, Comissões e T       |                  |           |
                                        |    |          |     |
                     |CLB082902  |     |     |                 |COEL  |COEL  |
B-0447039               |
| 1021245920    |     956|SP    |500000489 | 6|14.06.2011|15:24:02|14.06.2011|
14.06.2011|B-0447039-ENCR    |           8,95 |BRL  |8000800000  |
Juros, Comissões e T       |                  |           |
                                        |    |          |     |
                     |CLB082902  |     |     |                 |COEL  |COEL  |
B-0447039    

       |

Так что я искал ответ, почему текст такой странный.Я обнаружил, что это так из-за неправильного расположения CR + LF (возврат каретки + перевод строки).Я сделал некоторые исправления вручную, и через это я увидел, что можно лучше организовать текст, как это видно ниже:

--------------------------------------------------------------------------------
| Nº documento  |     LL.|TpDoc.|Nº doc.ref|LL|Entrado em|Hora    |Data doc. |Dt.lçto.  |Elemento PEP      | Valor/moeda ACC|MdACC|Cl.custo    |Denom.classe custo         |Material          |  Qtd.entr.|Texto breve material                    |UML |Doc.compra| Item|Texto do pedido      |Usuário    |DEs  |Est  |Nº ref.estorno   |Empr. |EmFI  |Definição do projeto
--------------------------------------------------------------------------------
| 1016939462    |       1|WE    |5000058364| 1|22.02.2010|10:52:43|22.02.2010|22.02.2010|Y0444871PROJELMC  |         540,93 |BRL  |8000124000  |Serviço de Terceiro        |                  |     1,000 |                                        |UR  |4501328844|    1|ESTUDOS E PROJ. REDE |CLB055760  |     |     |                 |COEL  |COEL  |Y-0444871               |
| 1020016002    |       1|WE    |5000053667| 1|15.02.2011|11:56:05|15.02.2011|15.02.2011|B0447039PROJELMC  |       2.011,84 |BRL  |8000124000  |Serviço de Terceiro        |                  |     1,000 |                                        |UR  |4501633481|    1|ESTUDOS E PROJ. REDE |CLB093440  |     |     |                 |COEL  |COEL  |B-0447039               |
| 1020258918    |     798|SP    |500000121 | 8|15.03.2011|18:06:18|15.03.2011|15.03.2011|B-0447039-ENCR    |           6,92 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB107395  |     |     |                 |COEL  |COEL  |B-0447039               |
| 1020585116    |     761|SP    |500000225 | 1|15.04.2011|14:13:44|15.04.2011|15.04.2011|Y-0444871-ENCR    |           1,88 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB145327  |     |     |                 |COEL  |COEL  |Y-0444871               |
| 1020586939    |     184|SP    |500000230 | 4|15.04.2011|16:22:41|15.04.2011|15.04.2011|B-0447039-ENCR    |           7,03 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB145327  |     |     |                 |COEL  |COEL  |B-0447039               |

Я мог также видеть образец в тексте.Каждая строка начинается с этого символа |.Поэтому для каждой строки, которая не начинается с «|», следует объединить с предыдущей строкой.

Проблема КАК ЕСТЬ:

| 1020941333    |     569|SP    |500000343 | 9|18.05.2011|15:27:00|18.05.2011|
18.05.2011|Y-0444871-ENCR    |           1,93 |BRL  |8000800000  |
Juros, Comissões e T       |                  |           |
                                        |    |          |     |
                     |CLB082902  |     |     |                 |COEL  |COEL  |
Y-0444871               |
| 1020941586    |      43|SP    |500000344 |43|18.05.2011|15:41:43|18.05.2011|
18.05.2011|B-0447039-ENCR    |           9,02 |BRL  |8000800000  |
Juros, Comissões e T       |                  |           |
                                        |    |          |     |
                     |CLB082902  |     |     |                 |COEL  |COEL  |
B-0447039               |

Желаемый вывод

| 1020941333    |     569|SP    |500000343 | 9|18.05.2011|15:27:00|18.05.2011|18.05.2011|Y-0444871-ENCR    |           1,93 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB082902  |     |     |                 |COEL  |COEL  |Y-0444871               |
| 1020941586    |      43|SP    |500000344 |43|18.05.2011|15:41:43|18.05.2011|18.05.2011|B-0447039-ENCR    |           9,02 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB082902  |     |     |                 |COEL  |COEL  |B-0447039               |

У меня много трудностей для реализации в Notepad ++.Я не могу сделать это вручную, потому что файл содержит более 4,9 миллиона строк.Я действительно ценю, если кто-то может показать мне немного света об этой проблеме, используя Notepad ++ или другое программное обеспечение, которое может быть лучше для этой цели.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Это заменит любой тип разрыва строки w, за которым не следует ни слова:

  • Ctrl + H
  • Найти что: \R(?!\|)
  • Заменить на: LEAVE EMPTY
  • check Обтекание
  • check Регулярное выражение
  • Заменить все

Объяснение:

\R          # any kind of linebreak (ie. \r, \n, \r\n)
(?!         # negative lookahead, zero length assertion that makes sure we do not have after:
    \|      # a pipe character
)           # end lookahead

Результат для данного примера:

| 1020941333    |     569|SP    |500000343 | 9|18.05.2011|15:27:00|18.05.2011|18.05.2011|Y-0444871-ENCR    |           1,93 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB082902  |     |     |                 |COEL  |COEL  |Y-0444871               |
| 1020941586    |      43|SP    |500000344 |43|18.05.2011|15:41:43|18.05.2011|18.05.2011|B-0447039-ENCR    |           9,02 |BRL  |8000800000  |Juros, Comissões e T       |                  |           |                                        |    |          |     |                     |CLB082902  |     |     |                 |COEL  |COEL  |B-0447039               |
0 голосов
/ 09 декабря 2018

Вы можете использовать регулярное выражение, чтобы найти канал, за которым следует новая строка, и использовать отрицательный прогноз (?!, чтобы проверить, что справа от канала находится не шаблон, начинающий новую строку.Затем замените на первую группу захвата, чтобы сохранить трубу ..

Найти что:

(\|)\R(?!\|[ \t]+\d+[ \t]+\|)

Заменить на:

$1

Пояснение

  • (\|) Сопоставить трубу в группе захвата
  • \R Соответствует последовательности новой строки в Unicode
  • (?! Отрицательный взгляд вперед
    • \|[ \t]+\d+[ \t]+\| Соответствует трубе, 1+ раз пробел или табуляция, 1+ цифр, 1+ пробел или табуляции и труба
  • ) Закрыть негативный прогноз

См. Демонстрационную версию regex

...