FORMAT

目的

GET 文または PUT 文によるストリーム入出力ファイルとの間のデータ送信を制御します。

構文

name:FORMAT(format-list);

パラメーター

name
文のラベルではなく GOTO 文で使用できない、添え字なしのラベル プレフィックス。
format-list
形式指定項目のリスト。

説明

FORMAT 文は、ストリーム入出力ファイルまたは文字列との間でのデータ送信を制御するために、GET 文または PUT 文で使用される形式指定リストを記述します。FORMAT 文は、GET 文または PUT 文を実行した結果として実行される場合以外は無効です。

形式リストは、カンマで区切られた形式項目のリストで構成されます。各形式項目の前に、オプションで繰り返し係数を付けることができます。繰り返し係数は、かっこで囲んだ式、または整数のいずれかです。繰り返し回数は、かっこで囲んだ形式リスト以外のすべての項目について、少なくとも 1 つのスペースで項目と区切る必要があります。繰り返し係数の値は、ゼロより大きく 255 より小さくなければなりません。

形式項目は次のとおりです。

  • (format-list)
  • A(w) または A
  • B(w) または B
  • B1(w) または B1
  • B2(w) または B2
  • B3(w) または B3
  • B4(w) または B4
  • E(w) または E(vv,d)
  • F(w) または F(w,d)
  • P 'Picture'
  • R (name)
  • COLUMN(n) または COL(n)
  • LINE(n)
  • PAGE
  • SKIP または SKIP(n)
  • TAB または TAB(n)
  • X(n) または X

(format-list) は、1 つの形式項目として使用する、かっこで囲んだ形式リストです。A から P は、データ形式項目です。それぞれの w、d、、または n は、整数定数または式で、その値 k は、特定の形式項目の定義でさらに制限されている場合を除き、0 以上 255 以下である必要があります。

形式リストに制御が渡されるたびに、最後に使用された形式項目とその次のデータ形式項目の間のすべての形式項目が評価されます。その次のデータ形式項目は、ストリーム ファイルとの間で送信されるデータの変換を制御するために使用されます。

制御が FORMAT 文の形式リストの終わりに達すると、FORMAT 文に制御を渡した R 形式に制御が戻ります。

制御が GET 文または PUT 文の形式リストの終わりに達し、文の入出力リスト内の 1 つ以上の値がまだ送信されていない場合は、形式リストの先頭に制御が移動します。文の入出力リスト内にある送信される値よりも多くの形式項目がある場合、余分な形式項目は無視されます。

各形式項目は次のように記述されます(FORMAT 文の例は形式項目の説明に含まれます)。

  • かっこで囲んだ形式リスト (format-list)

    かっこで囲んだ形式リストを形式項目として使用する場合、繰り返し回数で指定した回数だけ使用されます。

    F: FORMAT(F(10,4),2(A(5),E(14,3)),SKIP);

    この例は次と同等です。

    F: FORMAT(F(10,4),A(5),E(14,3),A(5),E(14,3),SKIP);
  • データ形式項目 (A、B、B1、B2、B3、B4、E、F、P)

    データ形式項目 A、B、B1、B2、B3、B4、E、F、および P は、ストリーム ファイルとの間での値の送信と変換を制御します。各データ形式では、w 文字が入力ストリームから読み取られるか出力ストリームに書き込まれます。この場合の w は、形式で指定されているか変換時に計算されたフィールド幅です(詳細については、「データ型変換」の章を参照)。

    入力行の残りが w 文字に満たない場合、その行に残っているすべての文字が読み取られ、新規の行が取得されます。その後で、合計 w 文字が読み取られるように、新規の行から追加の文字が読み取られます。

    出力行の残りが w 文字に満たない場合、適切な文字数がその行に書き込まれ、新規の行が開始されます。合計 w 文字が書き込まれるように、残りの文字は新規の行に書き込まれます。

    各データ形式が値の変換をどのように制御するのかの詳細については、「データ型変換」の章の「形式制御変換」のセクションを参照してください。

  • R(label)

    R(label) 形式項目は、この形式項目が、指定されたラベルにある FORMAT 文から取得されることを示します。つまり、R(label) 形式項目は、R 形式内に名前が指定されている FORMAT 文の形式リストに制御を移動します。

    この移動の効果は、FORMAT 文の形式リストがサブルーチンとして呼び出されるようなものです。リモートの形式リストがすべて使用されると、R 形式に続く形式項目に制御が返されます。

    F: FORMAT(A,X(3));
    PUT EDIT(P,Q) (R(F),E(14,3));

    前述の例では、P の値は、FORMAT 文に含まれる A 形式によって送信されます。Q が転送されると、X 制御形式が評価されることでリモートの形式リストが終了し、制御が戻って E 形式を使用して Q の値が転送されます。これは、次と同等の内容です。

    PUT EDIT(P,Q) (A,X(3),E(14,3));
  • COLUMN(n) または COL(n)

    COLUMN または COL の形式項目は、出力ストリームに空白を挿入するか、入力ストリームの文字をスキップして、次の文字が行の列 n に読み込まれるようにします。

    COLUMN 形式はファイルに対してのみ有効です。

    現在の出力行にちょうど n-1 文字が含まれている場合、出力は実行されず、次の出力は現在の行の列 n から開始されます。

    現在の出力行に含まれているのが n-1 文字未満で、n が行サイズ以下である場合、現在の行に十分な空白が配置され、次の出力が列 n から開始されます。

    現在の出力行に含まれているのが n-1 文字未満で、n がこのファイルの行サイズより大きい場合、現在の行に書き込みが行われ、新しい行が開始されます。次の出力は、新しい行の列 1 から開始されます。

    現在の出力行にすでに n 文字以上が含まれている場合は、ストリーム ファイルに書き込みが行われ、新しい行が開始されます。n がこのファイルの行サイズより大きい場合、新しい行に空白は配置されません。そうでない場合、n-1 個の空白が新しい行に配置され、次の出力が行の列 n から開始されます。

    読み込まれる次の文字が列 n にくるように現在の入力行が配置されている場合、文字はスキップされません。

    現在の列が列 n より前にあり、n が現在の行のサイズを超えないように現在の入力行が配置されている場合、次の入力が列 n から開始されるように、その行の十分な文字がスキップされます。

    現在の列が列 n よりも前にあるが、n が現在の行のサイズを超えるように現在の入力行が配置されている場合、または現在の列が列 n よりも後にある場合は、新しい行が読み込まれます。n が新しい行のサイズを超える場合、文字はスキップされず、次の入力は列 1 から開始されます。そうでない場合、n-1 文字がスキップされ、次の入力が列 n から開始されます。

    n はゼロより大きくなければなりません。

    例:

    COL(n) COLUMN LINENO NEW COLUMN NEW LINENO
    25 25 1 25 1
    24 25 1 24 2
    26 25 1 26 1
    30 25 1 1 2

    前述の例では、行サイズ s が 26≤s≤30 であると仮定しています。

  • LINE(n)

    LINE 形式項目は、印刷ファイルを特定の行に設定します。したがって、PRINT 属性が設定された状態で開かれたストリーム ファイルに対する出力を制御するためにのみ使用でき、結果的にページ サイズが考慮されます。

    LINE 形式項目は、印刷ファイルに対してのみ有効です。ページの先頭を基準にして指定された行にストリーム ファイルを配置します。

    現在の行番号が n 未満であり、n がページ サイズを超えない場合、現在の行が行番号 n になるように十分な行が出力に書き込まれます。

    現在の行番号が n より大きい場合、または n がページ サイズを超える場合、ページの残りの部分は空白行で埋められ、ENDPAGE 条件が通知されます。ただし、現在の行番号がすでにページ サイズを超えていない場合に限ります。現在の行番号がページ サイズを超えている場合、ENDPAGE 条件は通知されず、新しいページが開始されます。

    現在の行が n と等しく、現在の列が 1 である場合、出力は行われません。現在の行が n と等しいが、現在の列が 1 でない場合、ENDPAGE 条件が通知されます。ただし、現在の行番号がすでにページ サイズを超えていない場合に限ります。現在の行番号がページ サイズを超えている場合、ENDPAGE 条件は通知されず、新しいページが開始されます。

    n はゼロより大きくなければなりません。

  • PAGE

    PAGE 形式項目は、印刷ファイルで使用され、新しいページを開始します。これは、PRINT 属性が設定された状態で開かれたストリーム ファイルに対する出力を制御するためにのみ使用できます。

    PAGE 形式項目は、ストリームを新しいページの先頭に配置し、行番号を 1 にリセットして、ページ番号を 1 つ増やします。

  • SKIP(n) または SKIP

    SKIP 形式項目は、現在の行を基点として新しい位置にストリーム ファイルを設定します。入力ファイルと出力ファイルでのみ使用できます。

    入力ストリームに適用される SKIP 形式項目は、現在の入力行の残りと、後続の n-1 行をスキップします。つまり、n 行の境界を越えてスキップします。

    出力ストリームに適用される SKIP 形式項目は、現在の行と n-1 の空白行に書き込みます。つまり、n 行の境界を書き込みます。

    n が省略された場合は、値 1 が設定されます。n の値はゼロより大きくなければなりません。n の値がゼロ以下の場合、SKIP オプションは無視されます。

    PRINT 属性が設定された状態で出力ストリーム ファイルが開かれた場合、および SKIP 形式項目の結果として書き込まれる行の総数がページ サイズを超える場合、現在の行が書き込まれた後、ページを埋めるのに十分な空白行が書き込まれ、ENDPAGE 条件が通知されます。

  • TAB(n) または TAB

    TAB 形式項目は、指定されたタブ ストップ n に印刷ファイルを設定します。これは、PRINT 属性が設定された状態で開かれたストリーム ファイルに対する出力を制御するためにのみ使用できます。

    TAB 形式項目を使用すると、現在の行に十分な空白が配置され、行の現在の列を基点として n 番目のタブ ストップに配置することができます。タブの相対位置は実装定義です (この実装では 8 文字間隔)。これ以外の実装では異なる場合があり、実際には一定の間隔でタブ ストップが配置されていない場合もあります。

    現在の列がタブ ストップである場合、TAB 形式項目によって、次のタブ ストップで次の出力を開始するのに十分な空白が配置されます。

    現在の行にタブ ストップが n 個残っていない場合は、現在の行が書き込まれ、新しい行が開始されます。最初のタブ ストップが列 1 ではない場合、十分な空白がこの行に配置され、最初のタブ ストップに配置されます。

    TAB 形式項目を使用する場合、行サイズを最初のタブ ストップより小さくすることはできません。n が省略された場合は、既定値 1 が設定されます。

    n の値はゼロより大きくなければなりません。

    前述の 2 つのルールのいずれかに違反している場合、改行が挿入され、データは引き続き送信されます。

  • X(n) または X

    X 形式項目は、n 個の空白を出力ファイルに書き込むか、または入力ファイルで n 個の位置をスキップします。n が省略された場合は、n の既定値は 1 です。X 形式項目は、GET EDIT 文および PUT EDIT 文の FILE オプションと STRING オプションの両方で有効です。

    現在の行の残りが n 文字未満である場合、合計 n 文字が書き込まれるかスキップされるように、入力では残りの文字はスキップされます。出力では空白が書き込まれ、追加の文字はスキップされるか、次の行に空白として書き込まれます。

    n の値はゼロより大きくなければなりません。

制約事項

なし。