“语法”突出显示平面文件

“语法”突出显示平面文件

我搜索了 Google,查找了相关内容,但似乎大多数编辑器的可配置语法高亮定义都是基于关键字等的。我需要一个基于列和行的定义,基本上就是用来高亮平面文件中不同字段的定义。

然而,它需要比一条线适合所有情况更复杂,有几种不同的“类型”的线。

下面是一个示例

A9999000055555 333333     55554444422222210102009000000333333
B44444555550000
B44444555550000
B44444555550000
B44444555550000
C9999        0004

除了“0004”(B 记录数)和“10102009”(日期)之外,所有其他连续数字都是实际的字母数字,代表不同的用户输入字段。第一个字母通常被指定为行类型。

这个问题的目的是让人们验证文件格式的“正确性”。通常,这些文件通常是以自动方式创建的,但业务规则会发生变化,旧的大型机程序必须更新(最终结果并不理想)。因此,这个想法是让创建这些文件的人能够自己仔细检查文件是否符合格式。我并不打算在这里进行任何业务规则验证,纯粹是格式验证。

答案1

你可以看看 RecordEditor记录编辑器它不是文本编辑器(它以表格形式显示数据)。它还具有单条记录显示 + 其他可用视图。

默认是选择记录布局,但有一个“首选布局”,它将使用正确的记录布局显示每个记录。

它确实允许您直观地检查文件

使用 RecordEditor,您可以在表格中显示文件(按照首选选项

RecordEditor 表格显示

您还可以在突出显示的文本视图中显示(视图 >>>> 文本视图(突出显示字段)

带有突出显示字段的文本编辑器视图

你也可以混合搭配,这里当前记录也以表格形式显示在右侧:

带有突出显示字段和单记录视图的文本编辑器视图


或者记录编辑器有宏选项。你可以

  1. 使用内置宏ViewForEachRecordType.js或者HeaderDetailFooterTabs.js(某些版本缺失)在单独的选项卡上显示每种记录类型
  2. 编写你自己的(可能改编自ViewForEachRecordType.js

跑步ViewForEachRecordType.js

运行宏

这将为文件中的每个记录类型生成一个单独的选项卡:

ViewForEachRecordType.js 的输出


另一种可能性是文本探索器,我自己还没有尝试过,但它看起来会突出显示字段

答案2

您可以编写脚本来添加 HTML 标签来进行着色。sed(在线上工作)和awk(适用于列)可能会有所帮助,尤其是在 Linux 上。或者 perl 脚本。您可以使用正则表达式进行模式匹配。

您还必须添加最少的 HTML 代码才能将其转换为 HTML 文件(标题和正文标签)。

答案3

Vim!从那里开始更改语法高亮的说明然后从那里出发。我认为你会说:

  • 如果一行以“A”开头,它将包含一系列 12 个字符;一个空格;六个字符;一些空格;许多字符
  • 如果一行以“B”开头,它将有一系列 14 个字符;
  • 如果一行以“C”开头,则它将有 4 个字符;一些空格;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

然后,如果行正确,它们将被突出显示,如果它们与正则表达式不匹配,则不会突出显示。

如果您想突出显示这些行中的特定字段,情况会变得更加复杂。

就我个人而言,我会寻找从编辑器调用一些脚本的方法,这些脚本可以为我完成所有检查。这样,您可以使用任何编辑器,而不必被迫使用具有您需要的突出显示灵活性的编辑器。

相关内容