!--a11y-->

ABAP には水平線と垂直線を生成するいくつかのオプションが用意されています。該当する命令の一覧については、線と空白行を参照してください。
連結された線またはフレームに接する線は、自動的に結合されます。線が接合するのは、線の方向において、その線の少なくとも 1 つが、空白文字または空白行によって分断されない場合です。特定のポイントで接合する線のタイプや数によって、以下のようなさまざまな字線を作図することができます。例外的に線の結合を避けるために、特殊な線を使用することができます。

この状況では、ページヘッダとページフッタが、ページの行を使用することに注意してください。このため、十分な空白行を生成しないと、望ましくない線の結合が起きる可能性があります。たとえば、標準ページヘッダの後の最初の行に垂直線‘| ’を出力すると、ページヘッダの下線と自動的に連結されてしまいます。
線の自動結合に関する他のデモンストレーションについては、任意のシステムで実行可能プログラム SHOWLINE を呼び出してください。
次の例は、水平線と垂直線を生成する方法を示しています。

REPORT demo_list_straight_lines NO STANDARD PAGE HEADING.
SKIP TO LINE 3.
ULINE AT 2(1).
WRITE
4 '-'.
WRITE
6 '--'.
WRITE
9 '---'.
ULINE AT
12(4).
SKIP TO LINE 1.
POSITION 18.
WRITE '|'.
SKIP TO LINE 3.
DO 4 TIMES.
NEW-LINE.
POSITION 18.
WRITE '|'.
ENDDO.
出力は以下のようになります。

最初の ULINE 命令で 1 列分の水平線が生成されます。最初の WRITE 命令で生成されるハイフンは通常の出力項目として表示されます。2 番目の WRITE 命令で生成される 2 つのハイフンによって、2 列分の直線が生成されます。次の 3 つのハイフンは、ULINE 命令と共に 7 列分の直線を生成します。
最初の '|' 文字の出力によって、最初の行に直線が生成されます。他の 4 つの '|' 文字は、3 行目から開始する 4 行分の垂直線として結合されます。
次の例は、各種の角を生成する方法を示しています。

REPORT demo_list_edges NO STANDARD PAGE HEADING.
WRITE
'--'.
WRITE /
'|'.
SKIP TO LINE 1.
ULINE AT 5(6).
NEW-LINE.
WRITE 10
'|'.
SKIP TO LINE 4.
WRITE: '| |',
/ '----------'.
これにより、出力は以下のようになります。

ここでは、垂直線の線末が垂直線の線末と接し、角が生成されます。
次の例は、各種の T 字線を生成する方法を示しています。

REPORT demo_list_t_pieces NO STANDARD PAGE HEADING.
WRITE
'---'.
WRITE /2
'| |'.
ULINE AT
/5(8).
SKIP TO LINE 4.
DO 3 TIMES.
WRITE '|'.
NEW-LINE.
ENDDO.
SKIP TO LINE 5.
WRITE '---------'.
SKIP TO LINE
4.
ULINE AT
6(10).
WRITE 15
'|'.
これにより、出力は以下のようになります。

ここでは、線末と線末が直角に交わり、T 字線が生成されます。
次の例は、十字線を生成する方法を示しています。

REPORT demo_list_crosses NO STANDARD PAGE HEADING.
WRITE '|'.
WRITE /'-------'.
WRITE /
'|'.
SKIP TO LINE 1.
DO 3 TIMES.
WRITE 12 sy-vline.
NEW-LINE.
ENDDO.
SKIP TO LINE 2.
ULINE AT 12(1).
出力は以下のようになります。

2 つの線が交差すると、十字線が生成されます。
組み込みの細かい枠や密な階層表示の場合、空白文字や空白行を挿入するスペースがない場合でも、特定の字線を別に確保しておきたいことがあります。
この場合、システム定義定数として定義されている特殊線をインクルードプログラム<LINE> に使用することができます。
WRITE <lin> AS LINE.
プログラムに特殊線を適用するには、インクルードプログラム <LINE> またはより複雑なインクルードプログラム <LIST> を自分のプログラムに組み込む必要があります。インクルードプログラム <LINE> には特殊線のテキスト ( 短) が含まれています。
特殊線は、定義されたとおりに、出力一覧に表示されます。線が結合されるのは、各線が実際に接している場合だけです。各特殊線が結合されるように自動的に長さが伸ばされることはありません。
特殊線を出力する最も簡単な方法は、命令パターンを使用することです ( 参照: 命令パターンを介した WRITE の使用) 。WRITE 命令のアセンブル 画面で、ラジオボタン 線 を選択してから、 照会 を選択します。 次のダイアログボックスが表示されます。

このダイアログボックスには、プログラムコードに簡単に組み込むことができる利用可能なすべての特殊線が表示されます。

以下のプログラムは、密なパターンの特殊線を生成する方法を示しています。また、一覧の線を動的にプログラムする方法も示しています。
REPORT demo_list_special_lines NO STANDARD PAGE HEADING LINE-SIZE 60.
INCLUDE <line>.
DATA: x0 TYPE i VALUE
10,
y0 TYPE i VALUE 10,
n TYPE i VALUE 16,
i TYPE i VALUE 0,
x TYPE i, y TYPE i.
x = x0. y = y0.PERFORM pos.
WHILE i LE n.
WRITE line_bottom_left_corner AS LINE.
x = x + 1. PERFORM pos.
ULINE AT x(i).
x = x + i. PERFORM pos.
WRITE line_bottom_right_corner AS LINE.
y = y - 1. PERFORM pos.
DO i TIMES.
WRITE '|'.
y = y - 1. PERFORM pos.
ENDDO.
WRITE line_top_right_corner AS LINE.
i = i + 1.
x = x - i. PERFORM pos.
ULINE AT x(i).
x = x - 1. PERFORM pos.
WRITE line_top_left_corner AS LINE.
y = y +1. PERFORM pos.
DO i TIMES.
WRITE '|'.
y = y +1. PERFORM pos.
ENDDO.
i = i + 1.
ENDWHILE.
FORM pos.
SKIP TO LINE y.
POSITION x.
ENDFORM.
このプログラムでは、サブルーチン POS を使用して、各出力にポジション X と Y が設定されています。出力は以下のようになります。

このプログラムでは、特殊線なしでは生成できない密ならせん形が生成されます。変数 N を使用して、任意の数のらせんを設定することができます。
ABAP に提供される線タイプを使用して、フレームのプログラムを作成することができます。以下のサンプルプログラムでは、マクロWRITE_FRAME を定義します。このマクロは、WRITE <f> 命令の代わりに使用することができます。WRITE_FRAME 指定した項目 <f> の周囲にフレームが作図されます。このフレームは、項目の長さに動的に適合します。

REPORT demo_list_write_frame NO STANDARD PAGE HEADING LINE-SIZE 60.
DATA: x TYPE i, y TYPE i, l TYPE i.
DEFINE
write_frame.
x = sy-colno. y =
sy-linno.
write: '|' no-gap, &1 no-gap, '|' no-gap.
l = sy-colno - x.
y = y - 1. skip to line y. position x.
uline at x(l).
y = y + 2. skip to line y. position x.
uline at x(l).
y = y - 1. x = sy-colno. skip to line y. position x.
END-OF-DEFINITION.
SKIP.
WRITE
'Demonstrating'.
write_frame 'dynamic frames'.
WRITE
'in'.
write_frame 'ABAP'.
WRITE
'output lists.'.
上記のプログラムで定義されたマクロ WRITE_FRAME の機能は、以下の出力に示されています。マクロの追加情報は、マクロの定義の呼出を参照してください。

ABAP に提供される線タイプを使用して、表形式一覧のグリッドのプログラムを作成することができます。以下のサンプルプログラムでは、相互に依存する 2 つのマクロ NEW_GRID と WRITE_GRID を定義します。NEW_GRID は、グリッドおよびグリッド内の改行を初期化するために使用します。WRITE_GRID は、WRITE <f> 命令の代わりに使用することができます。WRITE_GRID を使用する項目出力ごとに、項目の右に垂直のグリッド線が引かれ、項目の下に水平のグリッド線が引かれます。水平線は動的に項目の長さに適合します。すべての出力項目の線の集合がグリッドを形成します。

REPORT demo_list_grid LINE-SIZE 60 NO STANDARD PAGE HEADING.
TABLES
spfli.
DATA: x TYPE i, y TYPE i,
l TYPE i.
TOP-OF-PAGE.
WRITE 3 'List of Flights in a Dynamic Grid'
COLOR
COL_HEADING.
ULINE.
START-OF-SELECTION.
DEFINE new_grid.
y = sy-linno. y = y + 2. skip to line y.
x = sy-colno. position x. write
'|'.
END-OF-DEFINITION.
DEFINE write_grid.
x = sy-colno. y = sy-linno. position x.
write: &1, '|'.
l = sy-colno - x + 1.
x = x - 2. y = y + 1. skip to line y. position x.
uline at x(l).
y = y - 1. x = sy-colno. skip to line y. position x.
END-OF-DEFINITION.
GET spfli.
new_grid.
write_grid: spfli-carrid,
spfli-connid,
spfli-cityfrom,
spfli-cityto.
上記のプログラムで定義されたマクロ NEW_GRID と WRITE_GRID の機能は、以下の出力に示されています。マクロについては、マクロを参照してください。実行可能プログラムは、論理データベース F1S にリンクされています。ユーザが選択画面に該当する値を入力すると、出力は以下のようになります。

一番上にあるグリッド線が、TOP-OF-PAGE の後の命令ブロックの ULINE 命令によって生成されていることに留意してください。一覧ボディの垂直線は自動的にこの線と結合されます。