«Синтаксис» Выделите плоский файл

1202
hova

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

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

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

A9999000055555 333333 55554444422222210102009000000333333 B44444555550000 B44444555550000 B44444555550000 B44444555550000 C9999 0004 

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

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

5
Можете ли вы опубликовать образец плоского файла, чтобы мы могли увидеть структуру? Поставьте несколько строк, если некоторые зависят от предыдущих. Snark 15 лет назад 1
На какой платформе вам комфортно работать? Это должно быть решение для Windows? Я обычно склонялся бы к sed / awk / vim для такого рода вещей, потому что это то, в чем они действительно хороши, будучи разработанными, когда все компьютерные данные выглядели как ваш плоский файл. Еще один вопрос: какова цель редактирования такого файла? Вы берете это куда-нибудь, например, в базу данных или кладете обратно во что-то старое, как приложение для мэйнфреймов? atroon 14 лет назад 0
Сам формат был стандартным в течение многих лет, и в ближайшее время он не исчезнет, ​​потому что у многих клиентов все еще есть мэйнфреймы. По этой причине я надеялся предоставить клиентам (и мне) «простой» способ просмотра и проверки формата файла перед его отправкой. Windows будет предпочтительной платформой. hova 14 лет назад 0

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

3
Bruce Martin

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

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

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

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

RecordEditor table display

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

Text Editor View with highlighted fields

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

Text Editor View with highlighted fields and Single-Record View


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

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

Запуск ViewForEachRecordType.js

Running Macro

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

Output From ViewForEachRecordType.js


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

1
alfplayer

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

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

Целью является не создание HTML, а предоставление рекомендаций при редактировании реальных файлов. hova 15 лет назад 0
Редактирование в чем? Vim (regex), notepad2 (примитивные парсеры), ...? Rook 15 лет назад 0
@Idigas Редактирование НИЧЕГО, что может (потенциально) выполнить вышеизложенное, а также сохранить его (без выделения разметки). Просто простой текстовый редактор. hova 15 лет назад 0
1
Amanda

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

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

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

У меня уйдет месяц на преодоление Обучающей скалы VIM, и это только начало, даже не начать выделять hova 14 лет назад 1
Ладно, ты не любишь vim. Но это будет работать в этой ситуации. Amanda 14 лет назад 0
1
atroon

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

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

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

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

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

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

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

# 1 Это самая важная часть этого процесса, цель которого - убедиться, что файл соответствует формату, и ошибки легко обнаружить. № 2 не так точен, как общее количество записей и тому подобное, которые являются частью самого файла, и их не нужно вычислять, просто выделять. № 3 выходит далеко за рамки того, что я хотел сделать, но скорее это то, что произойдет с файлом с помощью собственных средств клиентов (обычно автоматизированных). Я надеялся, что мне не придется самому кодировать решение в C #, но, увы, меня удивляет, что, учитывая время и продолжительность плоских файлов, такого уже нет. hova 14 лет назад 0
Ах, но это не удивительно ... это человеческая натура. «Эти данные пришли из компьютера, поэтому они верны» - это удивительно распространенное отношение. Также «Если что-то не так с этим файлом, они поймают его в штаб-квартире». Мои симпатии. atroon 14 лет назад 0
1
njd

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

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

Для Vim вы можете определить файл выделения следующим образом:

syntax clear A B C  syntax match A /^A\%(\a\|\d\)\ \d\ \\S\+$/ syntax match B /^B\%(\a\|\d\)\$/ syntax match C /^C\%(\a\|\d\)\ \\d\$/  highlight A guifg=darkgreen highlight B guifg=darkblue highlight C guifg=royalblue 

и загрузить его :source myhighlight.vim

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

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

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

0
mpeterson

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

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

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

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

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

Да, я уже прошел через это, это бесполезно, так как оно основано на ключевых словах. У меня нет ключевых слов, только позиции и несколько идентифицирующих букв. hova 14 лет назад 1
Ах .. в этом случае ваша лучшая ставка может быть либо с помощью решения VIM, либо путем простого создания пользовательского интерфейса для этого файла. mpeterson 14 лет назад 0
0
GAThrawn

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

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

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

0
AdamV

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

Это древний пост, но, пожалуйста, подумайте над расширением ответа. Просто указание на продукт не считается ответом по нынешним стандартам, потому что оно ничего не говорит о том, почему это хорошее решение или как его решить. Хорошее руководство по рекомендации программного обеспечения [здесь] (http://meta.superuser.com/questions/5329/how-do-i-recommend-software-in-my-answers). Благодарю. fixer1234 8 лет назад 1
0
Parimal Dharane

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

На какое программное обеспечение вы ссылаетесь здесь, в своем ответе? slm 11 лет назад 1

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