一个生成COBOL测试数据的小程序——分析COBOL中数据声明的语句
2008-05-15 16:21
609 查看
一般开发中,我们都使用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是啥?是分析数据格式的一个过程,改天写分析数据格式时再说明,呵呵。
つづく
所以挽起袖子,来做最基础的
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是啥?是分析数据格式的一个过程,改天写分析数据格式时再说明,呵呵。
つづく
相关文章推荐
- 一个生成COBOL测试数据的小程序——解释数据中的数据类型
- 用分析函数实现自动生成sqlloader定长数据装载控制文件的一个语句
- mysql快速生成测试数据的方法,以及分页limit语句优化
- 程序实现分析C语言的声明语句含义
- 做的一些测试数据的分析 一个是直接循环插入数据库 一个是循环好了放在数组里 在插入数据库
- Linux下的一个简单汇编程序, .long声明数据的长度问题!
- 使用sql语句生成测试数据
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 一个最简单的测试在dev/下生成字符设备的程序
- MySQL与MSSQl使用While语句循环生成测试数据的代码
- 写一个程序,能够动态生成多条插入语句如:insert into MyStudents values(“人名1”,年龄,‘男’,分数1,分数2)。将生成的插入语句输出到记事本文件 SQLStr.txt中
- C专家编程:用python写cdecl程序,以分析C语言程序的声明语句
- (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
- 主函数main()中由数字和字母组成的字符串s为测试数据,程序 主要提取字符串s中由字符'$'分隔的不同八进制数形式的字符串, 将八进制数形式字符子串所对应的字符生成新的字符串
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 声明一个Circle类,有数据成员radius(半径),成员函数area(),计算圆的面积,构造一个Circle的对象进行测试
- ASP网站数据采集程序制作:一个采集入库生成本地文件的几个FUCTION(可用来生成HTML静态网页)
- 借助数据库执行sql语句批量生成测试数据
- ASP网站数据采集程序制作:一个采集入库生成本地文件的几个FUCTION(可用来生成HTML静态网页)
- [程序]自己做了一个测试数据生成器 可以下载