PL/I&不打印在标签停止

问题描述:

我有以下的PL/I代码:PL/I&不打印在标签停止

declare 1 u union, 
     2 c character(1), 
     2 ci fixed binary(4) unsigned; 

    ci = data_mem(data_ptr); 
    put list (c); 

这个做什么,是它需要一个整数,输出的是,如果它是一个ASCII/EBCDIC值。所以它显示字符。沙发这个作品。 现在的问题是,每个字符以24格的间隔打印,就好像插入了3个TAB。 我尝试将c转换为字符串,然后应用trim()但没有帮助。

任何想法?

这是PRINT属性文件的默认PUT LIST行为。从IBM企业P​​L/I for z/OS语言参考,在面向流的数据传输 - >列表 - > PUT列表引导(强调我的)下:

数据列表项的值被转换到字符表示(图形除外)并传输到数据流。空白分隔传输的连续数据值。 对于PRINT文件,根据程序标签设置分隔项目(请参见“PRINT属性”)。

下一个手册部分讨论PRINT属性。在这里,我们具有由列表 - 和数据定向数据传输中传输的 上左边距和执行定义的预设标签 位置上自动对准

数据值。

由于您省略了FILE,您的PUT将进入默认的FILE(SYSPRINT)。 SYSPRINT被隐式定义为FILE ENVIRONMENT(F RECSIZE(121))OUTPUT PRINT STREAM(参见输入和输出 - > FILE属性 - >语言参考中的文件常量,以及定义和使用连续数据集 - >使用流I的PRINT文件/ O在程序员指南)。 IIRC,默认值为24,每行5个标签,与60年代末PL/I F早期常见的旧式120字节打印机兼容。这可以通过声明一个PLITABS结构来修改(在前面提到的手册部分中有描述)。

LIST和数据控制的I/O旨在快速地处理脏的I/O接口,但很少考虑输出格式(但对输入非常宽容)。编辑格式化输出更好,但它显示了很多FORTRAN根输入和输出。就个人而言,对于使用格式化输出和记录输入的传统报告,我将使用记录I/O,这与标准COBOL I/O类似。

+1

这似乎显示默认选项卡位置,它与您所说的一致:https://www.ibm.com/support/knowledgecenter/SSY2V3_4.4.0/com.ibm.entpli.doc_4.4/pg/ibma1d51002738。 htm#ibma1d51002738__tabsrh –

+0

感谢您挖掘并提醒我有关PLITABS。搜索这个信息的时候有很多噪音,我不断遇到这些信息。大量的小麦/谷壳分离。我正在更新答案来提及它(它与默认的SYSPRINT相同)。 – zarchasmpgmr