"Синтаксис" Выделите плоский файл
Я гуглил, посмотрел и исследовал, но кажется, что большинство редакторов настраиваемые определения подсветки синтаксиса основаны на ключевых словах и тому подобное. Мне нужен тот, который основан на столбцах и строках, в основном что-то, чтобы выделить различные поля в плоском файле.
Это должно быть более сложным, чем одна строка подходит для всех, однако, есть несколько различных "типов" линий.
Образец показан ниже
A9999000055555 333333 55554444422222210102009000000333333
B44444555550000
B44444555550000
B44444555550000
B44444555550000
C9999 0004
За исключением "0004" (число записей B) и "10102009" (дата), все остальные последовательные числа будут действительными буквенно-цифровыми цифрами, представляющими различные поля ввода пользователя. Первая буква обычно обозначается как тип строки.
Цель этого вопроса - дать людям возможность проверить "правильность" формата файлов. Обычно эти файлы обычно создаются автоматически, но бизнес-правила меняются, и старые программы для мэйнфреймов должны быть обновлены (и то, что в итоге происходит, не очень красиво). Таким образом, идея состоит в том, чтобы дать тем, кто создает эти файлы, способ проверить себя, что файл соответствует формату. Я не собираюсь НИКАКОЙ проверки бизнес-правил здесь, чисто форматировать.
9 ответов
Вы можете посмотреть на RecordEditor RecordEditor, это не текстовый редактор (он отображает данные в таблице). У этого также есть единственный показ показа + другие доступные представления.
По умолчанию выбирается макет записи, но есть "предпочтительный макет", который будет отображать каждую запись, используя правильный макет для записи.
Это позволяет визуально проверить файл
С RecordEditor вы можете отобразить файл в виде таблицы (в соответствии с предпочтительным вариантом)
Вы также можете отобразить в выделенном текстовом представлении (View >>>> Text View (выделение полей))
Вы также можете смешивать, здесь текущая запись также отображается в табличном формате с правой стороны:
В качестве альтернативы RecordEditor имеет параметр макроса. Вы могли бы
- Используйте встроенные макросы ViewForEachRecordType.js или HeaderDetailFooterTabs.js (отсутствует в некоторых версиях) для отображения каждого типа записи на отдельной вкладке
- Напишите свой собственный (возможно, адаптированный из ViewForEachRecordType.js)
Запуск ViewForEachRecordType.js
Это создаст отдельную вкладку для каждого типа записи в файле:
Еще одна возможность может быть Textplorer, я сам не пробовал, но, похоже, он будет выделять поля
Вы можете написать скрипт для добавления HTML-тегов для раскраски. sed (работает с строками) и awk (работает с колонками) могут помочь, особенно в Linux. Или Perl-скрипт. Вы можете использовать регулярные выражения для сопоставления с образцом.
Вам также нужно будет добавить минимальный HTML-код, чтобы преобразовать его в HTML-файл (заголовок и теги body).
Вим! Начните с инструкций по изменению подсветки синтаксиса и пройдите оттуда. Вот что я думаю, что вы говорите:
- Если строка начинается с буквы "A", она будет иметь последовательность из 12 символов; пространство; шесть символов; некоторые пробелы; много символов
- Если строка начинается с буквы "B", у нее будет 14 рядов символов;
- Если строка начинается с буквы "C", у нее будет 4 символа; некоторые пробелы; 4 символа
Таким образом, вы можете определенно определить свои правила подсветки на основе этих требований.
Я думаю, что вы вряд ли найдете решение, которое не связано с программированием.
Любой текстовый редактор с функциями подсветки синтаксиса, более сложными, чем простое сопоставление ключевых слов, обязательно будет более сложным, как в Vim и Emacs.
Для Vim вы можете определить файл выделения следующим образом:
syntax clear A B C
syntax match A /^A\%(\a\|\d\)\{13\} \d\{6\} \{5\}\S\+$/
syntax match B /^B\%(\a\|\d\)\{14\}$/
syntax match C /^C\%(\a\|\d\)\{4\} \{8\}\d\{4\}$/
highlight A guifg=darkgreen
highlight B guifg=darkblue
highlight C guifg=royalblue
и загрузить его :source myhighlight.vim
Тогда строки будут выделены, когда они правильны, или оставлены невыделенными, если они не соответствуют регулярному выражению.
Это становится сложнее, если вы хотите выделить определенные поля в этих строках.
Лично я бы искал способы вызвать какой-то скрипт из редактора, который мог бы сделать всю проверку за меня. Таким образом, вы можете использовать любой редактор и не быть вынужденным использовать тот, который обладает необходимой вам гибкостью выделения.
Я спросил о предполагаемом использовании такой утилиты, и на основе пары ключевых слов ("просмотреть и проверить перед отправкой") вы в основном хотите сделать следующее:
- Убедитесь, что файл в стандартном формате с правильным количеством столбцов (и, возможно, строк)
- Укажите некоторые статистические данные, такие как общее количество записей, общее количество проданных товаров, диапазон дат в файле и т. Д. И т. Д.
- Сохраните файл на центральном сервере или в зоне ожидания для последующей загрузки.
По моему мнению, правильный способ сделать это (особенно потому, что, как вы говорите, многие клиенты по-прежнему имеют мэйнфреймы и все еще получают данные в таких форматах), это использовать пользовательский интерфейс для передачи информации о данных на ваш покупатель.
Как это сделать? По сути, у вас есть 2 варианта: а) написать собственный анализатор файлов на Java, C# или C++ (дрожь), чтобы сделать "предварительный просмотр" данных, содержащихся в файлах. Или б) нанять члена или недавнего выпускника (сначала проверьте портфолио!) Классов компьютерного программирования, чтобы написать код для вас. Или племянник босса, или занудный парень твоей сестры, и т. Д. Я не знаю, какой у тебя опыт или интерес к этому, как и твое прошлое, поэтому, пожалуйста, прости меня, если я делаю неправильные предположения. Как и во многих других вещах в мире технологий, у вас могут быть любые два, быстрые, дешевые и хорошие.
Самая низкая стоимость и самый быстрый вариант из представленных до сих пор, которые охватывают диапазон возможностей, которые я знаю как профессионала в области технологий, состояли бы в том, чтобы укусить пулю, изучить некоторые vim
(используйте GVim для Windows) и используйте там фильтры подсветки синтаксиса. Вторым было бы сделать серию скриптов в чем-то вроде sed
или же awk
,
Поскольку ввод вашей проблемы - это, по сути, поток текста, прерывистый с интервалами (разрывы строк), обработка данных должна обрабатывать ввод аналогичным образом, и очень немногие программы делают это сейчас, потому что, как вы говорите, это это данные, сгенерированные старой программой для мэйнфреймов.
Excel также может быть полезен при импорте, но все строки должны быть отформатированы одинаково, так что это все равно не будет делать то, что вы хотите. Еще одна вещь, которая приходит на ум, - это то, что вы можете использовать Access для анализа такого файла и использовать некоторый VBA для создания количества записей и составления статистики, но с наложением бликов это будет не так просто. Если вы знаете разработчиков COBOL, это будет отличный 1-2-дневный проект для одного из них. Это может даже превратиться в проект с открытым исходным кодом на http://www.sourceforge.net/ для освобождения данных из лап мэйнфрейма!
Если бы я не собирался кодировать внешний интерфейс для файла, я бы, вероятно, использовал Notepad++, так как у него есть способ определить свой собственный язык, дополненный выделением.
Все о пользовательском разделе языка
Надеюсь, это поможет вам начать.
Похоже, ваши столбцы разделены пробелом?
Вы пытались просто импортировать их в Excel, а затем просто применить подсветку / цвета для столбцов?
Если это не сработает, то, как говорят другие, вы, вероятно, смотрите на программирование. Возможно, вы могли бы написать довольно простой Perl или VBScript, который возьмет этот текстовый файл и выведет выделенный синтаксис HTML-файл или аналогичный, используя что-то вроде регулярных выражений для соответствия шаблонам, которые вы ищете?
У меня было похожее требование, и я нашел решение, используя один из примеров, приведенных на экранах ":sytanx help".
Ниже приведен пример плоского файла с 2 записями одного типа. Здесь заголовок записи - "01", который является первым столбцом. После записи заголовка ниже приведены 4 столбца с фиксированной длиной:
+-----+-----+-----+-----+-----------------+
| No. | Beg | End | Size| Description |
+-----+-----+-----+-----+-----------------+
| 1| 1| 2| 2|HEADER |
| 2| 3| 7| 5|Column 2 |
| 2| 8| 11| 4|Column 3 |
| 2| 12| 15| 4|Column 4 |
| 2| 16| 17| 2|Column 5 |
+-----------------------------------------+
Образцы записей:
01AAAAABBBBCCCCDD
01PPPPPQQQQRRRRSS
" Syntax definition and highlighting for Record 01
:sy region rec1 matchgroup=rec1 start="^01" end="$" contains=r1col1,r1col2,r1col3,r1col4 keepend
:hi rec1 ctermbg=red guibg=red
" Syntax definition and highlighting for next 4 columns from Record 01
:sy region r1col1 matchgroup=r1col1 start="\%3v" end="\%8v" contained
:sy region r1col2 matchgroup=r1col2 start="\%8v" end="\%12v" contained
:sy region r1col3 matchgroup=r1col3 start="\%12v" end="\%16v" contained
:sy region r1col4 matchgroup=r1col4 start="\%16v" end="\%18v" contained
" Highlighted alternate columns with same color
:hi r1col1 ctermbg=green ctermfg=black
:hi r1col2 ctermbg=green guibg=green
:hi r1col3 ctermbg=darkblue ctermfg=white
:hi r1col4 ctermbg=green ctermfg=black
Таким образом, мы можем определить "регионы" для большего количества записей (скажем, "Запись начинается с"02") с различным количеством и шириной столбцов, которые могут присутствовать в одном и том же плоском файле, но будут выделены на основе заголовка записи.