K歌之后

庆祝上午论文答辩结束,晚上喊了一行人出去K歌。回来之后大脑就一直处于兴奋状态了,躺在床上满脑子都在回响着《天高地厚》这一首歌,不管我是如何 地使劲想睡也还是睡不着,试了下“数羊子”的方法,依然于事无补,索性起来写点东西,正好把论文中关于COBOL程序里面数值型数据存储形式这一块东西拿 出来做一个总结,更新上博客,方便日后查阅。 论文第四章的2.1小节针对数值型(Numeric)数据在内存中的几种存储形式进行了分析比较,这里写出来的东西就是分析比较之后得出来的结果,也是我所认为毕业论文里面最精华的一块地方。 4.2.1——数值型(Numeric)在内存中的5种存储形式 数值型数据使用9型描述符,一个描述符只允许存储0-9当中的一个数字。数值型数据是COBOL程序中使用得最多的一种数据类型,数值型数据在内存中有5种存储形式,一般用USAGE子句来指定数据项在内存中的存储形式,但是USAGE子句通常可以省略,省略USAGE的条件下默认存储形式为Display类型,它表示该数值型数据在内存中以外部十进制形式存储。 (1)Display:外部十进制形式。表示数值在机器外部的表现形式,一个数字在内存中占一个字节。直接用9型描述符标识, Display关键字可以省略。 (2)COMP:定点二进制形式。这种存储形式不是将一个数字对应一个字节或者半个字节,而是先把十进制数转化成二进制数形式然后在内存中存储。因为机器存储的形式也是二进制,所以采用定点二进制存储形式的数据读取时速度最快的。COMP型数据经常用来做数学计算。COBOL规定在内存中根据数据项的长度分别用两个字节、四个字节或八个字节来存放定点二进制形式的数值。见表1。 表1   COMP型数据项长度与内存字节对应关系 PIC子句中 描述符’9′的个数 占内存空间大小 1-4 2Byte 5-9 4Byte 10-18 8Byte (3)COMP-1、COMP-2:内部浮点数形式。以内部的二进制指数形式来表示一个数,以固定长度的内存单元来存放一个数字。 COMP-1:单精度内部浮点数,默认为4个Byte。4个Byte表示一个数字,8位为指数部分、24位为数字部分。 COMP-2:双精度内部浮点数,默认为8个Byte。8个Byte表示一个数字,16位为指数部分、48位为数字部分。 注意:COMP-1和COMP-2只能使用USAGE子句进行定义,因为长度确定,不能用PIC描述符。 (4)COMP-3:内部压缩十进制。外部十进制形式一个数字在内存中占一个字节。数值型数据只用到0到9十个数字,从表2可以看出,0到9十个数字的代码前四位是相同的,见表2。 表2   外部十进制数EBCDIC编码 十进制数字 EBCDIC码 ASCII码 0 11110000 00110000 1 11110001 00110001 2 11110010 00110010 3 11110011 00110011 4 11110100 00110100 5 11110101 00110101 6 11110110 00110110 7 11110111 [...]

Tips after Summary

离开Etp到公司来一个多月时间了,一直忙于公司本身的培训,把ETP那边的项目丢到一边一放就是这么长时间了。一直想找个时间把在ETP学到的东西做个整理总结出来,这活就趁现在有劲的时候来干了。 程序按照企业的要求规范来写,确实和我们以前写的程序有很大的不同,这里的N条tips,贴在这里了,权当小结了。 1:日本企业中要求COBOL程序的制作日期按照“年/月/日”的格式来写(PS:这点我没有做考证,只是从式样书上参考过来的),并且每一个Item都是写两个位置,不再是以前很随意的那种写法或者欧美格式的“月/日/年”。 2:File Section和Dara Section里面定义的所有常量、变量都要求PIC字段中的括号对齐。这样写出来,一本程序可以Coding得很漂亮,让人一看起来就感觉你很专业。这样也对应了Mr Yang的一句经典:程序写到人家一看就知道哪里出错的程度,那就说明你的程序写得很规范、很标准了。 3:由于我们的程序都是IBM以前做过的对日项目,式样书里面全部是日文内容。 F8用于切换平假名和片假名;F9切换半角和圆角;F10切换为英文字符 补充这个是因为程序要求日子字段对应过来的英文字段必须得非常准确,例如: Conversion对应的日语翻译为KONNBA-JON,不能够按照自己的理解来翻译。所以,新人进公司常常被告知写程序最好常用Copy、Paste,道理也就在这个地方。 4:这条肯定是对每个Programmer来说都很重要的一个规则,程序中绝对不需要多余的变量,尤其是全局变量。以前写程序的时候都没在意这个问题,还总以为多定义一两个变量可以方便以后程序的拓展,其实这样做很容易留下一个隐患就是为系统留下漏洞。 因为,程序在编译的时候是按顺序讲COBOL源码翻译为中间程序,然后内存中分配寻址空间的,这样一来,定义了多余的变量,就会在内存中空出来多余的寻址空间,有留下漏洞的隐患。 (PS:这一点也没有得到过验证,有兴趣的朋友可以私下里研究一下) 5:程序的主逻辑绝对要按照程序给的标准(构造图)写,专业和规范!上次在公司培训V+的时候,TL跟我们讲到了Sequential Match,然后就以银行中同一个Account No下多个Card No做求和操作时谈到两个文件做顺序比较的问题,结果说的一句就是按照明确的逻辑规范来写,不会出错而且这种逻辑是前人曾经走过的,效率方面也是所有可选 方案中最好的。 6:Occurs和Value的位置任意,但是一般做到与Pic对齐。 7:对程序的每个功能块加上“Box”,标识每个块的功能作用,不管是对大的程序还是小的程序,这都很必要。一本程序做出来并不是写给你一个人看,以后的维护操作说不定会经过很多Programmer的手,做到勤加注释,方便了别人也同时方便了自己。 8:Swith-area部分程序的开关要求按规范来写。