- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 COBOL 的初学者,我想知道如果我执行以下操作会发生什么:
(我知道下面的代码不是可运行的 Cobol,例如它就在那里)
foo pic x(5)
accept foo
然后用户输入一个只有 3 个字符长的字符串(例如 yes)foo 的值(value)会只是"is"吗?或者它会填充创建时指定的所有 5 个字符(例如:“(space)(space)yes”或“yes(space)(space)”,还是其他内容?
谢谢!
这是我的代码
000100 IDENTIFICATION DIVISION.
000200 *--------------------
000300 PROGRAM-ID. ZIPCODES.
000400 *--------------------
000500 ENVIRONMENT DIVISION.
000600 *--------------------
000700 CONFIGURATION SECTION.
000800 INPUT-OUTPUT SECTION.
000900 FILE-CONTROL.
001000 SELECT PRT ASSIGN TO UT-S-PRTAREA.
001100
001200 DATA DIVISION.
001300 *-------------
001400 FILE SECTION.
001500 FD PRT
001600 RECORD CONTAINS 80 CHARACTERS
001700 DATA RECORD IS LINE-PRT.
001800 01 LINE-PRT PIC X(80).
001900
002000 WORKING-STORAGE SECTION.
002100 *-----------------------
002200 EXEC SQL INCLUDE SQLCA END-EXEC.
002300
002310 01 done.
002320 02 donevar PIC x(5) VALUE 'done '.
002400 01 ZIP-RECORD.
002500 02 ZIP PIC X(5).
002600 02 ZCITY PIC X(20).
002700 02 ZSTATE PIC X(2).
002800 02 ZLOCATION PIC X(35).
002900
003000 01 H1.
003100 02 COLUMN-1 PIC X(8) VALUE 'Zip-Code'.
003200 02 FILLER PIC X(2).
003300 02 COLUMN-2 PIC X(5) VALUE 'State'.
003400 02 FILLER PIC X(2).
003500 02 COLUMN-3 PIC X(4) VALUE 'City'.
003600 02 FILLER PIC X(16).
003700 02 COLUMN-4 PIC X(14) VALUE 'Location Text'.
003800 02 FILLER PIC X(29).
003900
004000 01 L1.
004100 02 ZIP-L1 PIC X(5).
004200 02 FILLER PIC X(5).
004300 02 STATE-L1 PIC X(2).
004400 02 FILLER PIC X(5).
004500 02 CITY-L1 PIC X(20).
004600 02 LOCTXT-L1 PIC X(35).
004700 02 FILLER PIC X(28).
004800
004900 PROCEDURE DIVISION.
005000 *------------------
005100 BEGIN.
005200 OPEN OUTPUT PRT.
005220 PERFORM ZIP-LOOKUP UNTIL ZIP = done.
005600 PROG-END.
005700 CLOSE PRT.
005800 GOBACK.
005900 *****************************************************
006000 * zip code lookup *
006100 *****************************************************
006200 ZIP-LOOKUP.
006300 DISPLAY 'enter 5 digit zip code'
006400 ACCEPT ZIP
006500 EXEC SQL
006600 SELECT * INTO :ZIP-RECORD FROM ZBANK.ZIPCODE
006700 WHERE ZIP = :ZIP
006800 END-EXEC.
006801 PERFORM PRINT-H1.
006802 PERFORM PRINT-L1.
006900 PRINT-H1.
007000 MOVE H1 TO LINE-PRT
007100 WRITE LINE-PRT.
007200 PRINT-L1.
007300 MOVE ZIP TO ZIP-L1
007400 MOVE ZSTATE TO STATE-L1
007500 MOVE ZCITY TO CITY-L1
007510 STRING ZSTATE DELIMITED BY " ",", ",
007520 ZCITY DELIMITED BY SIZE INTO LOCTXT-L1
007700 MOVE L1 TO LINE-PRT
007800 WRITE LINE-PRT.
我试图在 zcity 之前写 zstate,只要输入没有“完成”,它就会一直询问邮政编码
最佳答案
输入的前 5 个字符将移至 FOO。如果输入的字符少于 5 个,则将它们放在 FOO 的左侧位置,其余字符(右侧)将用空格填充。如果用户输入的字符超过 5 个,则仅移动前 5 个字符。
因此,如果用户键入“yes”,则使用您的示例,那么 FOO 将包含“yes
bb
”
最好的办法就是尝试一下!
编辑以回应更新的问题...我认为你的问题是终止循环所需的条件是在循环体的开头设置的,并且不在最后。以下是解决此问题的一些常用技术:
预循环读取
DISPLAY 'Enter a 5 digit zip code' ACCEPT ZIP PERFORM ZIP-LOOKUP UNTIL ZIP = done. ... ... ZIP-LOOKUP. EXEC SQL SELECT * INTO :ZIP-RECORD FROM ZBANK.ZIPCODE WHERE ZIP = :ZIP END-EXEC. PERFORM PRINT-H1. PERFORM PRINT-L1. * Now get next zip code or 'done' DISPLAY 'Enter a 5 digit zip code' ACCEPT ZIP .
防止在循环内设置终止条件
PERFORM ZIP-LOOKUP UNTIL ZIP = done. ... ... ZIP-LOOKUP. DISPLAY 'Enter a 5 digit zip code' ACCEPT ZIP IF ZIP NOT = DONE EXEC SQL SELECT * INTO :ZIP-RECORD FROM ZBANK.ZIPCODE WHERE ZIP = :ZIP END-EXEC PERFORM PRINT-H1 PERFORM PRINT-L1 END-IF .
以上任一方法都可以解决您的问题。但是,我建议尝试更新您的编码风格以包括COBOL-85 构造。上面的第一个例子可以编码如下:
DISPLAY 'Enter a 5 digit zip code' ACCEPT ZIP PERFORM UNTIL ZIP = done EXEC SQL SELECT * INTO :ZIP-RECORD FROM ZBANK.ZIPCODE WHERE ZIP = :ZIP END-EXEC PERFORM PRINT-H1 PERFORM PRINT-L1 DISPLAY 'Enter a 5 digit zip code' ACCEPT ZIP END-PERFORM .
ZIP-LOOKUP 段落已内嵌到 PERFORM 语句中。对于一小段代码,我发现这种风格更多可读。还要注意单句段落(段落末尾只有一个句点)。使用 COBOL-85 范围终止符时(例如 END-xxx)每段使用多个句子的必要性消失了 - 事实上 - 应该避免。
您可以在此处使用的另一个 COBOL 结构是 88 LEVEL
。您可以按如下方式使用它:
01 ZIP-RECORD. 02 ZIP PIC X(5). 88 DONE VALUE 'done '. ... ...
您不再需要 donevar
了。替换您的原始测试:
IF ZIP = DONE
与:
IF DONE
只要变量 ZIP
包含值“done
bb
”,上述内容就会成立。的一个优势这样做(除了保存一个变量声明)是可以分配单个 88 LEVEL
名称几个值,如:
01 ZIP-RECORD. 02 ZIP PIC X(5). 88 DONE VALUE 'done ', 'quit ', 'stop '.
当用户输入 done
、quit
或 stop
中的任何一项时,88 级名称 DONE
的计算结果为是的。
最后,我认为这只是程序的框架,完成的版本将检查 I/O 错误、错误的 SQL 代码并进行基本的邮政编码验证。否则,您可能会遇到很多麻烦。
COBOL 引用资料
不幸的是,用于学习 COBOL 的最新资源非常少。然而,其中之一我推荐的书是Advanced Cobol 3rd Edition by DeWard Brown .本书提供了许多有关 COBOL 程序开发的示例和解释。它还确定是否construct 很少使用、过时或必不可少。知道这一点很好,因为您应该使用现代 COBOL 开发新代码编程技术(我继续看到许多使用 COBOL 85 之前的编码实践开发的新 COBOL - 这太可怕了)。
开源向导是OpenCOBOL Programmers Guide .这针对 OpenCOBOL 但其中大部分适用于任何风格的 COBOL。
最后,还有一些供应商指南和手册,其中许多都可以在 Internet 上找到。为了示例 Enterprise COBOL for z/OS Language Reference和 Enterprise COBOL for z/OS Programming guide是免费提供。微焦点 COBOL还提供指南。搜索任何你会发现的...
关于cobol - 为小于指定长度的 PIC 子句赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536785/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
让我们快速回顾一下以下案例: 不将动态链接与位置无关代码相结合。我可能敢说这是一个不可能的案例,但当我深入探讨这个主题时,我不太确定。 将静态链接与位置无关代码相结合。我相信这作为一个有效的组合是完全
我正在将一个线程局部变量添加到几个始终直接链接到可执行文件的目标文件中。这些对象永远不会包含在共享库中(并且可以安全地假设这在可预见的 future 会成立)。这意味着这些对象不需要 -fPIcfla
这个问题与this one有关以及它的答案。 我刚刚在我正在处理的构建中发现了一些丑陋之处。情况看起来有点像下面(用gmake格式写的);请注意,这特别适用于 sparc 和 x86 硬件上的 32
我在 PIC 的 mikroC 中实现基于定时器的中断时遇到问题。 如果 PORTC.F0 处有按键,我想切换端口引脚 8 次,并且切换之间应该有 100 毫秒的延迟。 通常使用延迟函数这会很容易 f
我试图通过 SPI 通信让 PIC1 成为主机,PIC2 成为从机。我想从 PIC1(master)发送命令到 PIC2(slave),然后让它做一些事情。但是,我也想通过 SPI 通信建立从 PIC
我正在使用 cvSplit() 来分离 RGB channel 并将它们打印在 3 个不同的图像中,显示颜色 r、g 和 b。但我只有黑白照片的 BW 图像。这是使用 cvSplit() 时的正确输出
初始化以下变量时: 01 BATCH-REC. 03 BATCH-VERSION PIC X(2). 03 BATCH-FIELDS
当我在学习 javafx 教程并尝试为 ImageView 创建一个新的 Image 实例以将其用于 TreeView 时,我注意到导师曾经创建一个 ImageView:new ImageView(n
我正在研究 PIC16F887,我的任务主要基于 adc 读数(8 位)。有 10 个不同的模拟输入,因此逐个读取它们需要相当长的时间。时钟为 20Mhz,adc 唯一允许的设备频率为 Fosc/32
我有一 block 带有特殊 UEXT connector 的 Olimex A20 板它可以连接 SPI、I2C 和 RS 232。我喜欢使用 Olimex 的 MOD Zigbee 模块直接通过
有没有办法在不使用pickit型编程器的情况下编程(闪存)裸(尚未使用引导加载程序闪存)pic32芯片? 例如,是否有任何正在进行的 JTAG 项目? 最佳答案 建议您引用Microchip PIC3
阅读时this blogpost , 当作者试图证明共享库需要 PIC 时,我遇到了以下情况。 If your shared library is built to only work when lo
我是 PIC mcu 的新手。我使用 pic12f675 MPLAB 和 XC8 来制作 LED 多次闪烁模式。 我有按钮问题(经过审查,它调用了 Bounce 和 Debounce)。 有时当我按下
是否有用于不可屏蔽中断的独立通信总线绕过可编程中断 Controller ? 或者 PIC 是否管理所有中断,但按照约定传递所有不可屏蔽中断? 这是否取决于架构,或者是否有特定的理由选择其中一种而不是
我想问一下如何在PIC C编译器中为PIC18f4620编写代码,以便在模拟输入之一为1时传输日期 最佳答案 对于这个网站来说,这个问题实在是太宽泛了。如何编写代码取决于您使用的 PIC C 编译
我是 PIC 编程新手,正在使用 MPLAb。我有一个关于中断的问题..所以我想做的是,当我按下按钮时,我想打开 LED 0,如果我松开按钮,则打开 LED 1。我认为我编写的代码有意义,但它不起作用
我想用我的PIC18F4550、蓝牙模块HC-06和电脑做一个简单的测试。我的意思是,我想使用蓝牙模块将一个简单的字符从 PIC 发送到 PC。 它应该在终端中出现一个“A”,但出现的是十六进制的 F
所以我使用的微型芯片是 PIC 18F。 如果设置了Alarm_Status.bits.b3(本质上只是一个开关),则会创建警报。第一个代码片段按其应有的方式工作 BS(TRISB,7);
经过大量的试错和堆砌,我(我们)设法让两张图片以一种非常特殊的方式重叠: 这是这样实现的: .container { width: 900px; margin: auto; } .center
我是一名优秀的程序员,十分优秀!