一个生成COBOL测试数据的小程序——分析COBOL中数据声明的语句

一般开发中,我们都使用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,这样一条记录就处理完毕。

代码如下:

 

Public   Sub  Analysis(file  As   String )
Dim  Data  As   String
Dim  temp  As   String
Dim  flag, flagEnd  As   Long
Set  varData  =   New  Collection
Open file 
For  Input  As  # 1
flagEnd 
=   0
temp 
=   ""
flag 
=   0
Do  Until EOF( 1 )
    Line Input #
1 , Data
    
If   Trim (Data)  <>   ""   Then
        
If   Mid (Data,  7 1 =   " * "   Then
                
        
Else
            Data 
=   Right (Data,  Len (Data)  -   7 )
            
For  i  =   1   To   Len (Data)
                oneChar 
=   Mid (Data, i,  1 )
                
If  oneChar  <>   "   "   Then
                    
If  oneChar  =   " . "   Then
                        flagEnd 
=   1
                    
Else
                        
If  temp  <>   Chr ( 13 Then
                            temp 
=  temp  &  oneChar
                            flag 
=   0
                        
End   If
                    
End   If
                
Else
                    
If  flag  =   0   And  temp  <>   ""   Then
                        temp 
=  temp  &   "   "
                        flag 
=   1
                    
End   If
                
End   If
            
Next  i
        
End   If
        
If  temp  <>   ""   And  flagEnd  =   1   Then
            tmpArr 
=   Split (temp,  "   " )
            varData.Add tmpArr
            temp 
=   ""
            flagEnd 
=   0
            flag 
=   0
        
End   If
    
End   If
Loop
Close #
1
Explanation
End Sub

 

Explanation是啥?是分析数据格式的一个过程,改天写分析数据格式时再说明,呵呵。

つづく

 
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值