在java中读取COBOL文件时,我需要一个正则表达式来匹配段落名称。以下是段落名称的示例..
9800-WRITE-SCREEN-A.
C70-WRITE-ABFGRPPARM.
FGH0-REWRITE-ABFGRPPARM.
8100-FILE-ERROR.
谢谢
答案 0 :(得分:4)
许多人认为,因为COBOL很老,所以必须简单......不好的假设。事实上
解析COBOL绝不是微不足道的。您可能会认为扫描COBOL程序
仅识别
PARAGRAPH
名称不应该需要一个完整的解析器---但它会有它的
挑战。仅靠正则表达式无法完成任务。
以下是一些提示和注意事项:
PARAGRAPH
名称可能出现在PROCEDURE DIVISION
以外的地方。基于
关于你问题中给出的名字我怀疑你应该只分析
PROCEDURE DIVISION
该计划。这是传统的最后一个部门
COBOL程序(假设程序不包含嵌套程序)。
如果您需要分析OO COBOL或嵌套的COBOL程序,则需要
更高级的解析技术
比Regex可以提供的。PARAGRAPH
名称将从第8列到第11列之间的某处开始。COPY
中包含REPLACE
或PROCEDURE DIVISION
指令,
您的分析将不完整和/或不准确。 COPY
可能有潜力
引入包含段落名称和REPLACE
的其他源代码
指令可以在文本操作期间更改后续段落的名称
编译阶段(即编译的程序可能有不同的名称
你发现的那个)。这不是常见的做法,而是您需要注意的事项。 如何识别COBOL程序的过程部门中的PARAGRAPH
名称?
简单,只需查找由句点(“。”)分隔的单个“单词”。段落名称是单一的
单词(可能包含连字符,字母和/或数字字符),并且始终以
一段时间,然后是一段时期。之前或之后可能(或可能不)是空格
每个时期。
现在在我看来,如果你想识别PARAGRAPH
名字,你可能想要
同时识别SECTION
个名字。 SECTION
名称类似于PARAGRAPH
名称,除此之外
接下来是强制性保留字SECTION
,后面跟着PRIORITY NUMBER
。 PRIORITY NUMBER
已经不再使用了(事实上
它已经过时了,所以你可能不必处理它们。
识别COBOL段落名称的有些缺陷但合理的过程
这不是一个正则表达式,而是一个涉及多个正则表达式和或的过程 文本操作。
PARAGRAPH
名称。SECTION
名称。上述内容并非万无一失,但应足以识别大多数“花园式”COBOL程序中的段落和部分名称。
祝你好运。
答案 1 :(得分:1)
"^[ ]{7,10}([-\\w]+)"
段落名称从第8-11行开始。 $ 1将是这个名字。
答案 2 :(得分:0)
一些规则:
Regex = ^ [] {7,10}([ - \ w] + \。\ n)