2017-02-09 1 views
1

У меня есть следующий 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(), но это не помогло.

Любые идеи?

ответ

4

Это поведение по умолчанию PUT LIST для файла атрибута PRINT. Из справочника по языку IBM Enterprise PL/I для z/OS в разделе Stream-ориентированная передача данных -> LIST -> PUT list-direct (выделение мое):

Значения элементов списка данных преобразуются к символьным представлениям (за исключением графики) и передается в поток данных. Пустой разделит передаваемые последовательные данные. Для файлов PRINT элементы разделяются в соответствии с настройками вкладки программы (см. «Атрибут PRINT»).

В следующем разделе руководства обсуждается атрибут PRINT. Здесь мы имеем

значения данных, передаваемые list- и данные направленной передачи данных являются автоматически выравниваются по левому краю и в предварительной реализации определенной вкладки позиций.

С вашего пропущенного FILE ваш PUT переходит к файлу по умолчанию (SYSPRINT). SYSPRINT определяется неявно как FILE ENVIRONMENT (F RECSIZE (121)) OUTPUT PRINT STREAM (см. Ввод и вывод -> Атрибут FILE -> Константа файла в справочнике по языку и определение и использование последовательных наборов данных -> Использование файлов PRINT с потоком I/O в Руководстве программиста). IIRC, по умолчанию - каждые 24, что дает 5 вкладок в строке, совместимых со старыми 120-байтовыми принтерами, распространенными в первые дни PL/I F в конце 1960-х годов. Это можно модифицировать, объявив структуру PLITABS (описанную в предыдущем разделе руководства).

Входы/выходы, управляемые LIST- и DATA, предназначены для быстрого ввода интерфейсов ввода-вывода & с небольшим учетом форматирования на выходе (но очень просты на вводе). EDIT лучше для форматирования вывода, но он показывает много своих корней FORTRAN для ввода и вывода. Лично для традиционных отчетов с использованием форматированного вывода и для ввода записи я работал бы с записью ввода-вывода, которая аналогична стандарту ввода/вывода COBOL.

+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

Смежные вопросы