Как подсчитать поля в плоском файле с помощью Notepad ++

851
LikestoLearn

Я работаю с большим количеством плоских файлов с разделителями каналов и выглядит примерно так:

John|Smith|01|01|1901|123 Road 

Есть ли способ узнать, что '1901' - это 5-е поле этой записи, основанное на каналах ('|')?

Это было бы невероятно полезно и избавило бы меня от необходимости считать поля в больших файлах.

1
Вы можете использовать PowerShell для этого, попробовать и провести некоторые исследования с PowerShell и RegEx. Загляните в `Get-Content` и посмотрите на` -Replace "",""` и передайте это в `Set-Content`. Вы бы хотели, чтобы регулярное выражение получало все после 4-го разделителя канала, но до 5-го, поэтому все между ними, но не включая. Просто быстрая идея без исследования и основанная на неопределенности память с помощью скриптового процесса, который я написал в прошлом. Pimp Juice IT 7 лет назад 0
Нет проблем, вы нашли подходящее решение? Pimp Juice IT 6 лет назад 0

2 ответа на вопрос

1
miroxlav

Можно ли использовать более подходящий инструмент для работы?

Вместо N ++, просто возьмите какой-нибудь прекрасный читатель CSV и хорошо проверяйте столбцы в сетке. Некоторые читатели свободны. Рекомендованный reCsvEditor может не только читать, но и редактировать файлы CSV, если это необходимо. Ключевым шагом в этом редакторе является выбор параметров на экране открытия файла в соответствии с вашим CSV-файлом: что такое разделитель, есть ли кавычки вокруг значений, есть ли разрывы строк внутри значений. Тогда ваш CSV файл открыт правильно. Тогда редактор также будет косвенно считать поля, вы можете легко увидеть, какое поле является самым правым. О редакторе не так много документации, автор предлагает опубликовать тикет или опубликовать на форумах.

Также, в качестве более простой альтернативы, вы можете попробовать обратиться к другим редакторам CSV, если reCsvEditor кажется сложным. Например, я просто тестирую UniCsvEd 1.1, который в основном без денег.

Благодарю за ваш ответ. Это на самом деле может быть моим лучшим вариантом, так как я не изучал варианты за пределами N ++. Спасибо за ваш отзыв. Знаете ли вы, где я мог бы лучше понять, как полностью использовать reCsvEditor? Еще раз спасибо. LikestoLearn 6 лет назад 0
Я скорректировал ответ в соответствии с вашими дополнительными вопросами. miroxlav 6 лет назад 0
0
Stephen Rauch

Чтобы найти номер поля на основе разделенных трубами полей, используйте Notepad ++ 32-bit.

  1. Установите плагин Python. Для этого:

    1. В меню выберите « Плагины» → «Диспетчер плагинов» → «Показать диспетчер плагинов».
    2. Установите флажок для Python Script и нажмите Установить
  2. Создайте новый скрипт: в меню выберите « Плагины» → «Python Script» → «Новый скрипт».

  3. Назовите сценарий Pipe Positionи выберите Сохранить
  4. Вставьте текст ниже в редактор и сохраните файл
  5. В меню выберите Плагины → Сценарий Python → Сценарии → Положение трубы.

""" Notepad++ python script to count field based on delimiter. Displays a message box based on the cursor position when invoked  """ from Npp import * import re  field_delimiter = '|' current_pos = editor.getCurrentPos() line_number = editor.lineFromPosition(current_pos) line_start = editor.positionFromLine(line_number) line_end = editor.getLineEndPosition(line_number) line = editor.getTextRange(line_start, line_end) index = current_pos - line_start field_number = line.count(field_delimiter, 0, index)   notepad.messageBox("'%s' is field # %d" % ( line.split(field_delimiter)[field_number], field_number + 1)) 
Благодарю за ваш ответ. Следуя вашим инструкциям, я получаю сообщение «Неизвестное исключение» в окне сообщения. Я не верю, что упустил какие-либо пункты в ваших инструкциях, но возможно, что я сделал. Знаете ли вы, почему я получаю эту ошибку при выполнении вашего скрипта? LikestoLearn 6 лет назад 0
https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi Stephen Rauch 6 лет назад 0

Похожие вопросы