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

来源:互联网 发布:c 二维数组一行赋值 编辑:程序博客网 时间:2024/06/14 17:39

一般开发中,我们都使用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, 71= "*" 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(13Then
                            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是啥?是分析数据格式的一个过程,改天写分析数据格式时再说明,呵呵。

つづく