所以我正在将一个mmddyyyy(01012000)日期读入pic x(8),我想知道如何使用之前的变量信息创建一个新变量为yyyymmdd(20000101)格式。我确定必须有一些方法可以用子串做或不做什么?
答案 0 :(得分:4)
@ScottNelson提供了答案的“使用子字符串”部分,以下是答案的“或不是”部分。
01 mmddyyyy.
05 mm pic xx.
05 dd pic xx.
05 yyyy pic xxxx.
01 yyyymmdd.
05 yyyy pic xxxx.
05 mm pic xx.
05 dd pic xx.
move corresponding mmddyyyy to yyyymmdd
答案 1 :(得分:2)
在工作存储中:
77 mmddyyyy-date pic x(8).
77 yyyymmdd-date pic x(8).
在你的程序划分逻辑中:
move mmddyyyy-date(1:2) to yyyymmdd-date(5:2)
move mmddyyyy-date(3:2) to yyyymmdd-date(7:2)
move mmddyyyy-date(5:4) to yyyymmdd-date(1:4)
答案 2 :(得分:2)
01 a-name-to-describe-the-source-date.
05 antdtsd-dd PIC XX.
05 antdtsd-mm PIC XX.
05 antdtsd-yyyy PIC XXXX.
01 a-name-to-describe-the-destination-date.
05 antdtdd-yyyy PIC XXXX.
05 antdtdd-mm PIC XX.
05 antdtdd-dd PIC XX.
或者
01 a-name-to-describe-the-source-date PIC X(8).
01 FILLER
REDEFINES a-name-to-describe-the-source-date.
05 antdtsd-dd PIC XX.
05 antdtsd-mm PIC XX.
05 antdtsd-yyyy PIC XX.
01 a-name-to-describe-the-destination-date.
01 FILLER
REDEFINES a-name-to-describe-the-destination-date.
05 antdtdd-yyyy PIC XX.
05 antdtdd-mm PIC XX.
05 antdtdd-dd PIC XX.
然后
MOVE antdtsd-dd TO antdtdd-dd
MOVE antdtsd-mm TO antdtdd-mm
MOVE antdtsd-yyyy TO antdtdd-yyyy
首先,如果你打电话给#34;转换",你就会夸大其词。这是一个简单的数据重新排列。
其次,有很多方法可以做到这一点。你用哪种方式做的? COBOL往往由"团队"编码,如果你为一份工作做这件事,那么你最好通过这样做来为团队中的其他人做这件事。
您已经展示了两种方式:引用修改和使用CORRESPONDING(如果您在实际代码中看到它,通常会缩写为CORR - 如果意图是,那么他们将键入CORRESPONDING不打字太多......?)。
如何在他们之间进行选择?性能?他们可能会生成相同的代码。所以编译器不在其中。对人类读者的理解力?对我来说,这在COBOL(或任何语言)中非常重要。
参考修改的两个问题。错字?没问题,代码将编译并执行。而且你会在测试中找到它。不是吗?在某一点?并浪费所有的时间,直到你找到它。第二个是,(5:4)是什么意思?当有人告诉你"该程序在多年内做了一些奇怪的事情时,你必须首先发现这一年伪装成(5:4)。哦,(1:4)。很好,你甚至还没有开始寻找程序的问题,你仍然需要检查位置和长度是否正确。好的,日期是一个简单的例子,但参考修改用户可能会将它应用到他们可以做的一切(如果没有,为什么将它应用到日期)?所以,玩得开心。
哦,COBOL没有"字符串",它有固定长度的字段。参考修改创建字段
CORR。使用它可以节省大量的输入(它存在的原因可能是由于打孔卡,以及许多COBOL程序处理输入数据和创建新输出数据的方式。打孔卡上的程序,所以这是一个真正的原因减少打字 - 打孔卡程序)。
嗯,现在是现代。
我们假设您想使用"月"如果年份是2005年,则作为获取月份名称的下标。
IF yy OF yyyymmdd EQUAL TO "2005"
MOVE month-name-in-table ( mm OF yyyymmdd ) TO ...
END_IF
(假设mm OF yyyymmdd被定义为数字)。
你想分散"资格" (在整个程序中使用OF或IN通过引用它所属的东西使名称唯一),只是为了使用CORR?