1

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

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

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

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

2 ответа2

1

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

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

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

0

Чтобы найти номер поля на основе разделенных трубами полей, используйте 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))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .