一般开发中,我们都使用COPY句导入记录的数据结构(以下简称COPY句),所以写这个小程序时肯定会涉及到COPY句的分析。
所以挽起袖子,来做最基础的
000100 03 レコード.
000200 05 レコード種別 PIC 9(3).
000300 05 XX番号 PIC 9(4) COMP.
000400 05 XX番号
000500 PIC S9(3) COMP-3.
000600 05 XXX種別 PIC N(10).
000700 05 XXX号 PIC S9(3) COMP-3 OCCURS 2 TIMES.
000800 05 XXXX種別 PIC X(1) OCCURS 4 TIMES..
000900 05 XXX番号 PIC S9(3) COMP-3.
001000 05 レコード識別情報 PIC S9(1) COMP-3.
001100 05 SWXXX1 PIC 1(1) BIT.
001200 05 SWXXX2 PIC 1(1) BIT.
001300 05 SWXXX3 PIC 1(1) BIT.
001400 05 あき04 PIC 1(1) BIT.
001500 05 あき05 PIC 1(1) BIT.
001600 05 あき06 PIC 1(1) BIT.
001700 05 あき07 PIC 1(1) BIT.
001800 05 あき08 PIC 1(1) BIT.
001900 05 あああ OCCURS 5 TIMES.
002000 07 はは PIC X(1).
002100 07 わわ PIC X(2).
002200 05 いいい REDEFINES XXX種別.
002300 07 らら PIC X(20).
002400 05 XXXXXNO PIC S9(05) COMP-3.
以上是一个COPY句的例子,这个例子基本上包括了所有常用的数据类型和常见的情况,可以拿这个来测试分析的是否正确。
通过例子可以观察到,前7列都是无用的,所以可以先将前面7列切掉。而COBOL的语句是以句点为结尾,所以在COBOL中可以尽情的换行、折行,这样分析语句时也就应该是以句点作为结束。
至于怎么来分析数据类型,还是先把语句读出来并处理成一个好的格式再说吧……
基本思想是这样,读一行,先把多余的空格去掉,让每段描述符之间都只有一个空格。如果遇到句点,用SPLIT把语句按空格分块,保存到一个String数组里,然后把String数组塞到一个Collection中,OK,这样一条记录就处理完毕。
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)