其他语言中的 Cobol 88 类型等效项是什么?

2024-01-30

我现在正在学习 COBOL,非常喜欢 88 类型的变量,我想知道其他语言中是否有类似的东西(也是最知名的语言,例如 C、Objective-C),甚至使用库。

我唯一能想到的相似之处就是使用

#define booleanResult (variableName==95) 

但无法设置boolenResult to true和做variableName假设 95 为值。


05  nicely-named-data             PIC X.
    88  a-meangingful-condition   VALUE "A".
    88  another-meaingingful-condition 
                                  VALUE "A" "B" 
                                     "X" THRU "Z" 
                                      SPACE ZERO.

IF a-meaningful-condition
IF another-meaningful-condition
SET a-meaningful-condition TO TRUE
SET another-meaningful-condition 
                           TO TRUE

IF 测试与 88(条件名称)关联的数据名称(条件变量)引用的值,以获取单个值或多个值之一,其中可以包括范围 (THRU) 和图形常量(零、空间、低值等)。

SET 是 1985 年标准中对 COBOL 的最新补充,将更改数据名称的值 to the 88 上指定的第一个值,这样如果您立即在测试中引用 88,则测试将为 true。

COBOL 没有布尔值,即解析为 0 或 1 或任何其他值(假/真)的意思。

任何支持对象的语言都可以用来模仿这种行为。也许你甚至已经在没有真正意识到的情况下做到了这一点。

正如 NealB 在评论中指出的那样,可以使用函数(或过程,或将控制权转移到另一个模块),但数据和对其的引用不会放在一起并免受意外损害。

COBOL 在定义数据结构方面具有很大的灵活性。 88 级对于维护和理解程序以及编写程序来说是一个强大的帮助。

我不知道还有哪种语言具有与此相同的直接和自然元素,但是有很多语言我不知道。

NealB 在有关使用 THRU/THROUGH 指定值范围的注释中再次提出了一个重要观点。

确实需要小心。尽管作者可能认为他们想要选择的数据可以用范围“010”THRU“090”表示,但他们可能没有意识到编译器所做的是包括每一个可能的值在该范围内,通过生成大于或等于“010”且小于或等于“090”的代码。

如果使用 THRU,请确保您的数据不能包含任何超出预期范围的内容。如果您的意思是“010”“020”“030”...“090”,只要数据在其入口点进行验证,就可以了,这样它就永远不会包含任何中间值。

典型的例子是大型机上的“A”到“Z”。我们都知道作者的意思,但编译器按字面意思理解。你cannot单独使用“A”THRU“Z”进行验证,因为在 EBCDIC 中,三组字母之间存在“间隙”,并且使用“A”THRU“Z”会将这些间隙视为正确的 88 使用。

某些 COBOL 编译器中的 88 级别确实下降的地方是缺少“FALSE”。

要重新使用上面的示例:

    88  a-meaingingful-condition  VALUE "A".
    88  a-meaingingful-condition-NOT 
                                  VALUE "N".

要测试开关/标志,您可以使用第一个 88。要关闭 flag.switch,您必须使用第二个。不理想。请参阅下面的链接之一,了解 88 定义中的 FALSE 示例。

在过去,标志/开关是用 MOVE 语句设置和重置的。一旦涉及到 MOVE,您就会遇到与尝试使用函数相同的问题。 MOVE和88级VALUE之间没有绑定关系。

如今,SET 可用于更改字段的值、打开或关闭标志/开关。

    05  FILLER PIC X.
        88  a-meaingingful-condition 
                                  VALUE "A".
        88  a-meaingingful-condition-NOT 
                                  VALUE "N".

正在测试的字段甚至不需要名称(可以是 FILLER 或省略(隐含的 FILLER))。

当然,正如 NealB 在对下面其中一个链接的评论中指出的那样,有人仍然可以使用组项目上的引用修改来通过 MOVE 进入该字段。所以...

01  FILLER.
    05  FILLER PIC X.
        88  a-meaingingful-condition 
                                  VALUE "A".
        88  a-meaingingful-condition-NOT 
                                  VALUE "N".

现在他们甚至不能使用引用修改,因为没有可命名的字段。该字段的值只能来自定义中的 VALUE 子句,或者来自将 88 之一设置为 TRUE 的 SET 语句。

在此阶段,标志/开关具有的值(其实际值)变得无关紧要。

01  FILLER.
    05  FILLER PIC X(7).
        88  a-meaingingful-condition 
                                  VALUE "APPLE".
        88  a-meaingingful-condition-NOT 
                                  VALUE "BICYCLE".

因为没有任何东西可以用来测试文字/数据名称,并且该字段不能是除 SET 之外的任何动词的目标,所以您不再需要检查所有包含 N、Y、0 或1,这样做,它们的情况并没有错误,并且没有其他值被放置在这些字段中。

我并不是建议使用 APPLE 和 BICYCLE,只是用它们来说明这一点。

88 也可以有一个以十六进制表示法表示的值,就像任何字母数字字段一样:

    88  a-meaingingful-condition  VALUE X"25".

还可以在组项上指定 88,通常使用图形常数作为值:

01  a-group-item.
    88  no-more-data-for-matching VALUE HIGH-VALUES.
    05  major-key                 PIC X(10).
    05  minor-key                 PIC X(5).

在文件匹配过程中,可以在文件末尾将密钥设置为高值,并且使用这些密钥仍然会导致其他文件被正确处理(低于该文件的密钥) 。

以下是一些来自 SO 的问题的链接,这些问题与 88 级的重要方面直接相关或无关。

COBOL 88 级数据类型 https://stackoverflow.com/questions/12224233/cobol-level-88-data-type

cobol 中的组变量 https://stackoverflow.com/questions/6937189/group-variable-in-cobol

在 Cobol 中,为了测试“空或空”,我们使用“NOT = SPACE [ AND/OR ] LOW-VALUE”?是哪一个? https://stackoverflow.com/questions/4095131/in-cobol-to-test-null-or-empty-we-use-not-space-and-or-low-value-wh

前缀“NO”在 COBOL 变量中是否有特殊含义? https://stackoverflow.com/questions/18721739/does-a-prefix-of-no-have-any-special-meaning-in-a-cobol-variable

COBOL 大写字母数据验证? https://stackoverflow.com/questions/9012975/cobol-data-validation-for-capital-letter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

其他语言中的 Cobol 88 类型等效项是什么? 的相关文章

  • 是否有针对 Python、Ruby、Sql、Cobol、Perl 和 PL/SQL 的静态分析工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个针对 Pyt
  • COBOL 中使用 COMP 的变量

    我试图了解带有 COMP 使用子句的 COBOL 变量如何存储值 我尝试了如下一个例子 01 VAR14 PIC S9 5 USAGE COMP MOVE 12345 TO VAR14 DISPLAY VAR14 在 SPOOL 中的值VA
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • 如何将参数从外部汇编器子例程传递回 cobol 程序?

    我试图从用汇编程序编写的外部子例程传回参数 调用例程是在 cobol 中 外部汇编例程的参数如下所示 01 CALCSHRS PARMS 05 CS DEPOSIT AMT PIC 9 5 V99 COMP 3 05 CS SHARE PR
  • 读取 COBOL 中的 STDIN (SYSIN)

    我想从 COBOL 中的 STDIN 又名 SYSIN 中读取行 现在我只想把它们打印出来 这样我就知道我已经拿到了它们 从我读到的所有内容看来 这应该有效 IDENTIFICATION DIVISION PROGRAM ID APP EN
  • COBOL 中的小数

    我对 COBOL 很陌生 我正在遵循 Micro Focus 附带的教程 但我似乎无法让该示例正常工作 我正在尝试打印 123 45 并且不断收到以下信息 我查了很多帖子 都没有解决我的问题 我正在使用 Micro Focus 的 Visu
  • 从 Python C API 中的字符串导入模块

    使用 Python C API 从文件导入 Python 模块相对容易PyImport Import 但是我需要使用存储在字符串中的函数 有没有办法从字符串导入 python 模块 澄清一下 没有文件 代码在字符串中 或者我必须将字符串保存
  • 将 COMP-3 压缩十进制字段解释为数值

    我正在创建一个 SSIS 包来从一系列抄写本文件中读取解压数据 我不确定以下字段定义的正确解释 希望有人知道 FIELD NAME 1 PIC S9 15 V9 3 COMP 3 FIELD NAME 2 PIC S9 3 V9 8 COM
  • 按长度连接字符串 COBOL

    需要将 4 个字符串连接到 cobol 中的目标变量 Like 01 WS S1 X 10 VALUE HI 01 WS S2 X 10 VALUE HOW 01 WS S3 X 10 VALUE ARE 01 WS S4 X 10 VAL
  • 可变长度表中的内存分配

    假设我在中定义了以下可变长度表WORKING STORAGE 01 SOAP RECORD 05 SOAP INPUT PIC X 8 VALUE SPACES 05 SOAP STATUS PIC 9 VALUE ZERO 05 SOAP
  • 如何在大型机 COBOL 中“休眠”?

    我想我正在使用 Enterprise COBOL for z OS 模拟标准 C 库的 sleep 函数等功能的技术是什么 可能最简单的方法是使用语言环境可调用服务 https www ibm com docs en zos 2 4 0 t
  • 在 COBOL 中连接未知长度的字符串

    如何在 COBOL 中将两个长度未知的字符串连接在一起 例如 WORKING STORAGE FIRST NAME PIC X 15 VALUE SPACES LAST NAME PIC X 15 VALUE SPACES FULL NAM
  • 如何删除字符串中的尾随空格和嵌入空格?

    我正在编写一个程序 将国内和国际帐号转换为 IBAN 号码 首先 我需要形成一个字符串 银行 ID 分行 ID 帐号 ISO 国家 地区代码 这些字段中可能存在尾随空格 但并非每个帐号都具有相同的长度 有些帐号具有分支标识符 而其他帐号则没
  • 在 Mac OS 下设置 COBOL 编译器?

    在我的大学里 我们正在学习 COBOL 我正努力在明年上课之前抢先学习 COBOL C 和 Java 问题是 COBOL 是so旧的 很难在 mac 中获得对它的支持 我的笔记本电脑是 mac 我知道它在 Mac 上运行良好 但找到可以解释
  • z/OS 如何调用 Web 服务? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 COBOL 程序 需要从 Web 服务获取数据 如果不使用 CICS 我最好的选择是什么 我认为 C 程序可以读取 Web
  • 由尾随空格分隔的 Cobol 字符串

    WORKING STORAGE FIRST STRING PIC X 15 VALUE SPACES SECOND STRING PIC X 15 VALUE SPACES OUTPUT STRING PIC X 31 VALUE SPAC
  • GNUCobol (OpenCOBOL) 错误:libcob:未找到模块“»”

    我正在转换一组为 Microfocus 编译器编写的 COBOL 程序 以便与 GnuCobol 一起使用 到目前为止 我已经取得了一定的成功 只需要更改一些特定于微焦点的日期命令 并使用 GnuCobol 的 std mf争论 我正在使用
  • COBOL 程序中出现重叠错误

    科博程序 PROGRAM ID SCHPROG ENVIRONMENT DIVISION INPUT OUTPUT SECTION FILE CONTROL SELECT MYFILE ASSIGN TO INDD ORGANIZATION
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • COBOL 88 级数据类型

    这是非常基本的问题 我必须为 COBOL 程序编写数据术语表 该数据术语表包含有关每个变量的以下详细信息 Name 数据类型 值范围 如果适用 行号 更全名 我有几个变量 其中包括 88 级开关 我的问题是 这些 88 级开关是否算作变量

随机推荐

  • 数字签名时间戳在 XP/Vista 上“不可用”,导致验证失败

    背景 我有一个 WiX Burn 安装包 其中包括安装 ReportViewer 2012 Runtime 在 Windows 7 或更高版本的计算机上运行时 它工作正常 在 XP SP3 或 Vista SP1 上它会失败 现在 检查Re
  • 使用mysqldump将表数据导出到csv文件

    我想使用 mysqldump 将表数据导出到 csv 文件中 我想做一些类似的东西 mysqldump compact no create info tab testing fields enclosed by fields termina
  • JBoss 4.2.2 Web服务soap:地址

    我在 JBoss 4 2 2 中部署了一个 EJB3 bean 作为 Web 服务 在生产中 服务器位于 Apache 服务器后面 该服务器将请求重定向到 Jboss 服务器 这使得 WSDL 具有错误的soap address 位置 我能
  • 将按钮添加到 PreferenceScreen

    我不知道如何在PreferenceScreen 向上按钮会在应用程序图标旁边的操作栏中显示插入符号 使您可以导航应用程序的层次结构 更多信息here http developer android com training implement
  • 查找 CSV 文件中的重复项总数

    我正在解析 CSV 文件 需要您的帮助 我的 CSV 文件中有重复项 我想告诉Python向我提供重复地址的总数和唯一地址的总数 然后列出它们 我已经成功到达地址显示它是唯一还是重复的部分 但现在我想告诉 Python 也为我提供受尊重的数
  • 查看和设置 Safari/Chrome 的 HTTP 标头

    我正在测试一个 API 我想用 safari 来访问它并查看返回的原始 json API 要求每个请求都发送特定的 HTTP 标头 Safari 或 Chrome 中有没有办法在访问 URL 时设置我的 http 标头 有几个 Google
  • 如何在 Pytorch 中可视化网络?

    import torch import torch nn as nn import torch optim as optim import torch utils data as data import torchvision models
  • 历史推送后,反应路由器不会重新渲染

    我希望在用户登录后重新渲染 刷新 所以我使用history push要做到这一点 import history from layout Navbar export const loginUser userData gt dispatch g
  • 如何在 JavaScript 中有效地将预定义大小的大块分割成较小的块,这些块是其大小的因素?

    假设我们有这样的结构 16 bins let BIN OF BINS 128 bits each chunk 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 52428
  • MATLAB 将多个图形保存到 PDF

    有什么办法可以做到这一点吗 我知道如何使用 saveas saveas 1 filename pdf 将一个图形保存到 PDF 文件中 但是否可以添加多个图形 所以像 saveas 1 2 3 filename pdf Thanks 我不这
  • 每 3 条记录后新建包含 div

    我想创建一个新的包含 div 3 个结果后 使用 PDO 结果循环 对于我的自学项目 我必须使用引导程序制作一个产品页面 并且在每第三条记录之后 我必须制作一个新行并再次显示 3 col md 4 等等 现在我将其作为我的代码 div cl
  • 如何获取 char 的 unicode 值?

    我想获得汉字的 Unicode 值 它可能看起来像let values u16 f 当我使用 as bytes I got 227 129 174 当我使用 escape unicode I got u306e the 0x306e这正是我
  • PHP 的 unlink 函数可以与路径一起使用吗?

    我想从 PHP 中的文件夹中删除文件 但我只有该文件的路径 是否可以提供取消链接的路径 例如 unlink path to file txt 如果这不起作用 删除这些文件的唯一方法是在 path to 目录中创建一个 php 文件 并将其以
  • 改变架构生成器中的列长度?

    我有两个字段需要增加字符限制 我通读了文档 令我惊讶的是我没有找到它的选项 可以做吗 如果不是 我应该如何解决这个问题 我可以删除该列并使用正确的属性重新创建它 但我不想丢失数据库中的任何数据 对于 Laravel 4 DB update
  • mysql、准备好的语句和自动类型转换

    我使用常规语句和准备好的语句执行完全相同的查询时得到不同的结果 我认为这是一个类型转换错误 mysql gt show columns from server where field vlan Field Type Null Key Def
  • 在 Android 中缓存文件的最佳实践

    我目前的应用程序将图像文件缓存在cache应用程序的子目录 这些图像用于ListView并存储在HashMap of SoftReferences to Bitmaps 所以我的问题是 缓存这些图像文件的最佳方法是什么 而不增加我的应用程序
  • 协助刷新 athena 表中的数据

    我编写了从 S3 上的多个外部表读取数据的查询 应用必要的过滤器 连接 然后将结果加载到目标表中以在 Athena 中进行分析 但是 随着源表中的数据刷新 我想刷新目标表 所以我打算删除并重新创建该表 但它似乎不起作用 我能够删除目标表 但
  • 为什么 ondrop 不起作用?

    我试图让拖放工作 但我将一个函数连接到 ondrop 事件 但该函数从未被调用 这是一个笨蛋 http plnkr co edit qGEdYO8okRZAR3bnZrNk p preview http plnkr co edit qGEd
  • MPMediaItems 原始歌曲数据

    我想知道如何访问 MPMediaItem 的原始数据 有任何想法吗 您可以通过以下方式获取媒体项的数据 void mediaItemToData Implement in your project the media item picker
  • 其他语言中的 Cobol 88 类型等效项是什么?

    我现在正在学习 COBOL 非常喜欢 88 类型的变量 我想知道其他语言中是否有类似的东西 也是最知名的语言 例如 C Objective C 甚至使用库 我唯一能想到的相似之处就是使用 define booleanResult varia