PL/I & 不在制表位上打印
PL/I & not printing on tab stop
我有以下 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 个制表符一样。
我尝试先将 c 转换为字符串,然后应用 trim() 但这没有帮助。
有什么想法吗?
这是 PRINT-attribute 文件的默认 PUT LIST 行为。来自 IBM Enterprise PL/I for z/OS Language Reference,在 Stream-oriented Data Transmission -> LIST -> PUT list-directed(强调我的)下:
The values of the data-list items are converted to character representations (except for graphics) and transmitted to the data stream. A blank separates successive data values transmitted. For PRINT files, items are separated according to program tab settings (see “PRINT attribute”).
下一节手册将讨论 PRINT 属性。这里有
Data values transmitted by list- and data-directed data transmission are
automatically aligned on the left margin and on implementation-defined preset tab
positions.
由于您省略了 FILE,因此您的 PUT 将转到默认的 FILE(SYSPRINT)。 SYSPRINT 被隐式定义为 FILE ENVIRONMENT(F RECSIZE(121)) OUTPUT PRINT STREAM(请参阅语言参考中的输入和输出 -> FILE 属性 -> 文件常量,以及定义和使用连续数据集 -> 使用带有流的 PRINT 文件 I/O 在程序员指南中)。 IIRC,默认值为每 24 个,即每行 5 个制表符,与 1960 年代后期 PL/I F 早期常见的旧式 120 字节打印机兼容。这可以通过声明 PLITABS 结构来修改(在前面提到的手册部分中有描述)。
LIST- 和 DATA-directed I/O 旨在成为快速和肮脏的 I/O 界面,很少考虑输出格式(但对输入非常宽容)。 EDIT 更适合格式化输出,但它确实显示了很多用于输入和输出的 FORTRAN 根。就个人而言,对于使用格式化输出的传统报告和记录输入,我会使用记录 I/O,它类似于标准 COBOL I/O.
我有以下 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 个制表符一样。 我尝试先将 c 转换为字符串,然后应用 trim() 但这没有帮助。
有什么想法吗?
这是 PRINT-attribute 文件的默认 PUT LIST 行为。来自 IBM Enterprise PL/I for z/OS Language Reference,在 Stream-oriented Data Transmission -> LIST -> PUT list-directed(强调我的)下:
The values of the data-list items are converted to character representations (except for graphics) and transmitted to the data stream. A blank separates successive data values transmitted. For PRINT files, items are separated according to program tab settings (see “PRINT attribute”).
下一节手册将讨论 PRINT 属性。这里有
Data values transmitted by list- and data-directed data transmission are automatically aligned on the left margin and on implementation-defined preset tab positions.
由于您省略了 FILE,因此您的 PUT 将转到默认的 FILE(SYSPRINT)。 SYSPRINT 被隐式定义为 FILE ENVIRONMENT(F RECSIZE(121)) OUTPUT PRINT STREAM(请参阅语言参考中的输入和输出 -> FILE 属性 -> 文件常量,以及定义和使用连续数据集 -> 使用带有流的 PRINT 文件 I/O 在程序员指南中)。 IIRC,默认值为每 24 个,即每行 5 个制表符,与 1960 年代后期 PL/I F 早期常见的旧式 120 字节打印机兼容。这可以通过声明 PLITABS 结构来修改(在前面提到的手册部分中有描述)。
LIST- 和 DATA-directed I/O 旨在成为快速和肮脏的 I/O 界面,很少考虑输出格式(但对输入非常宽容)。 EDIT 更适合格式化输出,但它确实显示了很多用于输入和输出的 FORTRAN 根。就个人而言,对于使用格式化输出的传统报告和记录输入,我会使用记录 I/O,它类似于标准 COBOL I/O.