5

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

Это должно быть более сложным, чем одна строка подходит для всех, однако, есть несколько разных "типов" линий.

Образец показан ниже

A9999000055555 333333     55554444422222210102009000000333333
B44444555550000
B44444555550000
B44444555550000
B44444555550000
C9999        0004

За исключением "0004" (число записей B) и "10102009" (дата), все остальные последовательные числа будут действительными буквенно-цифровыми цифрами, представляющими различные поля ввода пользователя. Первая буква обычно обозначается как тип строки.

Цель этого вопроса - позволить людям проверить "правильность" формата файлов. Обычно эти файлы обычно создаются автоматически, но бизнес-правила меняются, и старые программы для мэйнфреймов должны быть обновлены (а то, что в итоге происходит, не очень красиво). Таким образом, идея состоит в том, чтобы дать тем, кто создает эти файлы, способ проверить себя, что файл соответствует формату. Я не собираюсь НИКАКОЙ проверки бизнес-правил здесь, чисто форматировать.

9 ответов9

3

Вы можете посмотреть на RecordEditor RecordEditor, это не текстовый редактор (он отображает данные в таблице). У этого также есть единственный показ записи + другие доступные представления.

По умолчанию выбирается макет записи, но есть "предпочтительный макет", который будет отображать каждую запись, используя правильный макет для записи.

Это позволяет визуально проверить файл

С RecordEditor вы можете отобразить файл в виде таблицы (в соответствии с предпочтительным вариантом)

Отображение таблицы RecordEditor

Вы также можете отобразить в выделенном текстовом представлении (View >>>> Text View (выделение полей))

Текстовый редактор с выделенными полями

Вы также можете смешивать, здесь текущая запись также отображается в табличном формате с правой стороны:

Вид текстового редактора с выделенными полями и режим просмотра одной записи


В качестве альтернативы RecordEditor имеет параметр макроса. Вы могли бы

  1. Используйте встроенные макросы ViewForEachRecordType.js или HeaderDetailFooterTabs.js (отсутствует в некоторых версиях) для отображения каждого типа записи на отдельной вкладке
  2. Напишите свой собственный (возможно, адаптированный из ViewForEachRecordType.js)

Запуск ViewForEachRecordType.js

Запуск макроса

Это создаст отдельную вкладку для каждого типа записи в файле:

Вывод из ViewForEachRecordType.js


Еще одна возможность может быть Textplorer, я не пробовал сам, но, похоже, он будет выделять поля

1

Я спросил о предполагаемом использовании такой утилиты и, основываясь на паре ключевых слов ("просмотреть и проверить перед отправкой"), вы в основном хотите сделать следующее:

  1. Убедитесь, что файл в стандартном формате с правильным количеством столбцов (и, возможно, строк)
  2. Укажите некоторые статистические данные, такие как общее количество записей, общее количество проданных товаров, диапазон дат в файле и т.д. И т.д.
  3. Сохраните файл на центральном сервере или в зоне ожидания для последующей загрузки.

По моему мнению, правильный способ сделать это (особенно потому, что, как вы говорите, многие клиенты по-прежнему имеют мэйнфреймы и все еще получают данные в таких форматах), это использовать пользовательский интерфейс для передачи информации о данных на ваш компьютер. покупатель.

Как это сделать? По сути, у вас есть 2 варианта: а) написать собственный анализатор файлов на Java, C # или C++ (дрожь), чтобы получить «предварительный просмотр» данных, содержащихся в файлах. Или б) нанять члена или недавнего выпускника (сначала проверьте портфолио!) классов компьютерного программирования, чтобы кодировать парсер для вас. Или племянник босса, или ботаник твоей сестры и т.д. Я не знаю, какой у вас опыт или интерес к таким вещам, а также что-либо о вашем происхождении, поэтому, пожалуйста, простите меня, если я делаю неправильные предположения. Как и во многих других вещах в мире технологий, у вас могут быть любые два, быстрые, дешевые и хорошие.

Самая низкая стоимость и самый быстрый вариант из представленных до сих пор, которые охватывают диапазон возможностей, которые, как я знаю, как у специалиста по технологиям, заключаются в том, чтобы укусить пулю, изучить некоторый vim (использовать GVim для Windows) и использовать там фильтры подсветки синтаксиса. , Вторым было бы сделать серию скриптов в чем-то вроде sed или awk .

Поскольку ввод вашей проблемы - это, по сути, поток текста, отсекаемый с интервалами (разрывы строк), обработка данных должна обрабатывать ввод таким же образом, и очень немногие программы делают это сейчас, потому что, как вы говорите, это это данные, сгенерированные старой программой для мэйнфреймов.

Excel также может быть полезен при импорте, но все строки должны быть отформатированы одинаково, так что это все равно не будет делать то, что вы хотите. Еще одна вещь, которая приходит на ум, - это то, что вы можете использовать Access для анализа такого файла и использовать некоторый VBA для создания количества записей и составления статистики, но с наложением бликов это будет не так просто. Если вы знаете разработчиков COBOL, это был бы отличный 1-2-дневный проект для одного из них. Он может даже превратиться в проект с открытым исходным кодом на sourceforge.net для освобождения данных из лап мэйнфрейма!

1

Вы можете написать скрипт для добавления HTML-тегов для раскраски. sed (работает с строками) и awk (работает с колонками) могут помочь, особенно в Linux. Или Perl-скрипт. Вы можете использовать регулярные выражения для сопоставления с образцом.

Вам также нужно будет добавить минимальный HTML-код, чтобы преобразовать его в HTML-файл (теги заголовка и тела).

1

Вим! Начните с инструкций по изменению подсветки синтаксиса и пройдите оттуда. Вот что я думаю, что вы говорите:

  • Если строка начинается с буквы "A", она будет иметь последовательность из 12 символов; пространство; шесть символов; некоторые пробелы; много символов
  • Если строка начинается с буквы "B", у нее будет 14 рядов символов;
  • Если строка начинается с буквы "C", у нее будет 4 символа; некоторые пробелы; 4 символа

Таким образом, вы можете определенно определить свои правила подсветки на основе этих требований.

1

Я думаю, что вы вряд ли найдете решение, которое не связано с программированием.

Любой текстовый редактор с функциями подсветки синтаксиса, более сложными, чем простое сопоставление ключевых слов, обязательно будет более сложным, как в 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

Тогда строки будут выделены, когда они правильны, или оставлены невыделенными, если они не соответствуют регулярному выражению.

Это становится сложнее, если вы хотите выделить определенные поля в этих строках.

Лично я бы искал способы вызвать какой-то скрипт из редактора, который мог бы сделать всю проверку за меня. Таким образом, вы можете использовать любой редактор и не быть вынужденным использовать тот, который обладает необходимой гибкостью выделения.

0

Если бы я не собирался кодировать внешний интерфейс для файла, я бы, вероятно, использовал Notepad++, так как у него есть способ определить свой собственный язык, дополненный выделением.

Скачать / Главный сайт

Все о пользовательском разделе языка

Еще один пример / walkthru

Надеюсь, это поможет вам начать.

0

Похоже, ваши столбцы разделены пробелом?

Вы пытались просто импортировать их в Excel, а затем просто применить подсветку / цвета для столбцов?

Если это не сработает, то, как говорят другие, вы, вероятно, смотрите на программирование. Возможно, вы могли бы написать довольно простой Perl или VBScript, который возьмет этот текстовый файл и выведет выделенный синтаксис HTML-файл или что-то подобное, используя что-то вроде регулярных выражений для соответствия шаблонам, которые вы ищете?

0

Вы можете попробовать что-то вроде монарха

0

У меня было похожее требование, и я нашел решение, используя один из примеров, приведенных на экранах ":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") с различным количеством и шириной столбцов, которые могут присутствовать в одном и том же плоском файле, но будут выделены на основе заголовка записи.

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