Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

WRITE

出力を現在のデバイスに表示します。

Synopsis

WRITE:pc writeargument,...
W:pc writeargument,...

writeargument には、以下を指定できます。

expression
f
*integer
*-integer

引数

pc オプション — 後置条件式
expression オプション — 出力デバイスに書き込まれる値。リテラル、変数、オブジェクト・メソッド、およびオブジェクト・プロパティを含めて、数値または引用符付き文字列のいずれかに評価される有効な ObjectScript 式です。
f オプション — ターゲット・デバイスでの出力位置を定める 1 つまたは複数の形式制御文字。形式制御文字には、!、#、?、および / が含まれます。
*integer オプション — 出力デバイスに書き込まれる文字を表す整数コード。ASCII では 0 から 255 の整数、Unicode では 0 から 65534 の整数です。評価結果が適切な範囲の整数となる有効な任意の ObjectScript 式となります。アスタリスクは必須です。
*-integer オプションデバイス制御操作を指定する負の整数コード。アスタリスクは必須です。

概要

WRITE コマンドは、現在の入出力デバイスに指定された出力を表示します (現在の入出力デバイスを設定するには、USE コマンドを使用して $IO 特殊関数の値を設定します)。WRITE には、以下の 2 つの形式があります。

引数なしの WRITE

引数なしの WRITE は、定義されたすべてのローカル変数の名前と値を一覧表示します。プロセス・プライベート・グローバル、グローバル変数、または特殊変数はリストしません。以下の形式で定義済みのローカル変数を 1 行に 1 個ずつリストします。

varname1=value1
varname2=value2

引数なしの WRITE は、すべてのタイプのローカル変数値を引用符付き文字列として表示します。キャノニック形式の数とオブジェクト参照は例外です。キャノニック形式の数は引用符に囲まれずに表示されます。オブジェクト参照 (OREF)myoref=<OBJECT REFERENCE>[1@%SQL.Statement] のように表示されます。JSON 配列または JSON オブジェクトはオブジェクト参照 (OREF) として表示されます。ビット文字列値およびリスト値は引用符付きの文字列として表示され、データ値はエンコード形式で表示されます。

数値および数値文字列の表示を以下の例に示します。

  SET str="fred"
  SET num=+123.40
  SET canonstr="456.7"
  SET noncanon1="789.0"
  SET noncanon2="+999"
  WRITE
canonstr=456.7
noncanon1="789.0"
noncanon2="+999"
num=123.4
str="fred"

引数なしの WRITE は、以下の WRITE 出力の例のように、大文字/小文字を区別する文字列照合順にローカル変数を表示します。

A="Apple"
B="Banana"
a="apple varieties"
a1="macintosh"
a10="winesap"
a19="northern spy"
a2="golden delicious"
aa="crabapple varieties"

引数なしの WRITE は、以下の WRITE 出力の例のように、数値の照合を使用して、添え字ツリー順にローカル変数の添え字を表示します。

a(1)="United States"
a(1,1)="Northeastern Region"
a(1,1,1)="Maine"
a(1,1,2)="New Hampshire"
a(1,2)="Southeastern Region"
a(1,2,1)="Florida"
a(2)="Canada"
a(2,1)="Maritime Provinces"
a(10)="Argentina"

引数なしの WRITE は、フォームフィード ($CHAR(12)) やバックスペース ($CHAR(8)) などの制御文字を実行します。そのため、制御文字を定義するローカル変数は、以下の例に示すように表示されます。

  SET name="fred"
  SET number=123
  SET bell=$CHAR(7)
  SET formfeed=$CHAR(10)
  SET backspace=$CHAR(8)
  WRITE
backspace="
bell=""
formfeed="
             "
name="fred"
number=123

複数のバックスペースは back というローカル変数を指定して以下のように表示されます:バックスペース 1 つ:back="、バックスペース 2 つ:back""、バックスペース 3 つ:bac"="、バックスペース 4 つ:ba"k="、バックスペース 5 つ:b"ck="、バックスペース 6 つ:"ack="、バックスペース 7 つ以上:"ack="

引数なしの WRITE は、同じ行でその後に続くコマンドと最低 2 つの空白で区別されなければなりません。この後のコマンドが引数付きの WRITE である場合、その引数付きの WRITE には、適切な改行 f 形式制御引数を指定する必要があります。詳細は、以下の例を参照してください。

   SET myvar="fred"
   WRITE  WRITE          ; note two spaces following argumentless WRITE
   WRITE  WRITE myvar    ; formatting needed
   WRITE  WRITE !,myvar  ; formatting provided

引数なしの WRITE リストは、CTRL-C を発行すると中断され、<INTERRUPT> エラーが発生することがあります。

引数なしの WRITE を使用することで、定義済みのローカル変数をすべて表示できます。$ORDER 関数を使用することで、定義済みのローカル変数の限定されたサブセットを返すことができます。

引数付きの WRITE

WRITE は、1 つの writeargument またはコンマ区切りの writeargument のリストを取ります。WRITE コマンドは、expressionf*integer、および *-integer の各引数の任意の組み合わせを取ります。

  • WRITE expression は、expression 引数に対応するデータ値を表示します。expression には、変数の名前、リテラル、またはリテラル値に評価される式を指定できます。

  • WRITE f は、目的の出力書式設定を提供します。引数付き形式の WRITE は、各引数値を区切ったり、文字列を示すための自動的な書式設定を提供しません。そのため、expression の値は f 書式設定で区切られない限り、単一の文字列として表示されます。

  • WRITE *integer は、整数コードによって表される文字を表示します。

  • WRITE *-integer は、デバイス制御操作を提供します。

WRITE 引数は、コンマで区切られます。例えば以下のようになります。

   WRITE "numbers",1,2,3
   WRITE "letters","ABC"

以下のように表示されます。

numbers123lettersABC

WRITE は、出力文字列の末尾に改行を追加しません。WRITE の出力を区切るには、f 引数の書式設定文字 (改行 (!) 文字など) を明示的に指定する必要があります。

   WRITE "numbers ",1,2,3,!
   WRITE "letters ","ABC"

以下のように表示されます。

numbers 123
letters ABC

引数

pc

オプションの後置条件式。Caché は、後置条件式が True (0 以外の数値に評価される) の場合にこのコマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。引数なしの WRITE や引数付きの WRITE に対する後置条件式を指定することができます。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

expression

表示する値です。通常は、リテラル (引用符付き文字列、または数値) または変数になります。ただし、expression は、リテラル、変数、算術式、オブジェクト・メソッド、およびオブジェクト・プロパティを含む、任意の有効な ObjectScript 式にすることもできます。式に関する詳細は、"Caché ObjectScript の使用法" を参照してください。

expression は、任意のタイプの変数にすることができます。これには、ローカル変数プロセス・プライベート・グローバルグローバル変数、および特殊変数も含まれます。変数には添え字を付けることができます。WRITE は指定した添え字ノードの値のみを表示します。

リテラルとして指定するか、変数として指定するかによって、データ値は以下のように表示されます。

  • 文字列は括弧で囲まずに表示されます。一部の非表示文字 ($CHAR 0、1、2、14、15、28、127) は表示されません。その他の非表示文字 ($CHAR 3、16 ~ 26) はプレースホルダ文字として表示されます。制御文字 ($CHAR 7 ~ 13、27) は実行されます。例えば、$CHAR(8) はバックスペースを実行し、$CHAR(11) は垂直タブを実行します。

  • 数字はキャノニック形式で表示されます。算術演算は実行されます。

  • 拡張グローバル参照は、グローバルの値として表示されます。グローバル変数が定義されたネームスペースは示されません。存在しないネームスペースを指定した場合、Caché は <NAMESPACE> エラーを発行します。特権を持たないネームスペースを指定した場合、Caché は <PROTECT> エラーを発行し、続けてグローバル名とデータベース・パスを表示します (例:<PROTECT> ^myglobal,c:\intersystems\cache\mgr\)。

  • Caché リスト構造化データはエンコード形式で表示されます。

  • Caché ビット文字列はエンコード形式で表示されます。

  • オブジェクト参照は OREF 値として表示されます。例えば、##class(%SQL.Statement).%New() は OREF 2@%SQL.Statement と表示されます。JSON ダイナミック・オブジェクトまたは JSON 動的配列は OREF 値として表示されます。OREF の詳細は、"Caché オブジェクトの使用法" の “OREF の基本” を参照してください。

  • %Status は 1 (成功)、または複雑なエンコード失敗ステータスとして表示されます。失敗ステータスの最初の文字は 0 です。

f

ターゲット・デバイスの出力を配置する形式制御です。形式制御は、コンマで区切らずに形式制御文字の任意の組み合わせを指定することができますが、式と区切るためにコンマを使用する必要はあります。以下は、WRITE を端末に対して実行する例です。

   WRITE #!!!?6,"Hello",!,"world!"

形式制御は新規の画面の最上部に配置し (#)、次に 3 つの改行を行い (!!!)、最後に 6 列をインデントします (?6)。WRITE は文字列 Hello を表示し、形式制御の改行 (!) を実行して、文字列 world! を表示します。改行は列 1 に配置されることに注意してください。したがってこの例では、Hello はインデントされて表示されますが、world! はインデントされません。

形式制御文字は、引数なしの WRITE では使用できません。

詳細は、"WRITE で形式制御を使用する" を参照してください。

*integer

*integer 引数により、正の整数コードを使用して、現在のデバイスに文字を書き込めるようになります。これは、アスタリスクと、それに続く任意の有効な ObjectScript 式 (評価結果が文字に対応する正の整数になる式) で構成されます。*integer 引数は、出力可能文字または制御文字に対応することもあります。0 から 255 の整数は、対応する 8 ビットの ASCII 文字に評価されます。256 から 65534 の整数は、対応する 16 ビットの Unicode 文字 (Unicode システムの場合) に評価されます。

以下の例に示すように、*integer は整数コードを指定するか、整数コードに解決される式を指定できます。以下の例はすべて、"Caché” という文字を返します。

   WRITE !,"Cach",*233
   WRITE !,*67,*97,*99,*104,*233
   SET accent=233
   WRITE !,"Cach",*accent    ; variables are evaluated
   WRITE !,"Cach",*232+1     ; arithmetic operations are evaluated
   WRITE !,"Cach",*00233.999 ; fractional numbers are truncated to integers

作曲家ドボルザーク (Anton Dvorak) の名前を、適切なチェコ語アクセント記号で表示するために、以下を使用します。

   IF $SYSTEM.Version.IsUnicode()  {
   WRITE "Anton Dvo",*345,*225,"k" }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

式の評価から返された整数は、制御文字に対応することもあります。このような文字は、ターゲット・デバイスに従って解釈されます。*integer 引数を使用して、画面表示を管理する制御文字 (例えば、改ページ *12) や、ターミナルで通知音を出す *7 などの特殊文字を挿入できます。

例えば、現在のデバイスがターミナルの場合、整数 0 から 30 は ASCII 制御文字として解釈されます。以下のコマンドは、ASCII コード 7 および 12 をターミナルに送ります。

   WRITE *7 ; Sounds the bell
   WRITE *12 ; Form feed (blank line)

次に、expression 引数と、改ページ文字を指定する *integer の組み合わせ例を示します。

   WRITE "stepping",*12,"down",*12,"the",*12,"stairs"

*integer and $X, $Y

整数式は、ターミナルへの書き込み時に $X および $Y の特殊変数を変更することはありません。したがって WRITE "a"WRITE $CHAR(97) の両方とも、$X に含まれる列番号値をインクリメントしますが、WRITE *97$X をインクリメントしません。

*integer を使用すると、$X および $Y の値を変更しないで、バックスペース (ASCII 8)、改行 (ASCII 10) またはその他の制御文字を発行できます。次のターミナルの例では、この整数式の使用法を示します。

バックスペース :

  WRITE $X,"/",$CHAR(8),$X   ; displays: 01
  WRITE $X,"/",*8,$X         ; displays: 02

改行 :

  WRITE $Y,$CHAR(10),$Y
     /* displays: 1
                   2  */
  WRITE $Y,*10,$Y
     /* displays: 4
                   4  */

詳細は、"Caché 入出力デバイス・ガイド" の “ターミナル入出力” と $X および $Y の特殊変数を参照してください。

*-integer

アスタリスクとそれに続く負の整数 (デバイス制御コード)。WRITE は、以下の一般的なデバイス制御コードをサポートします。

コード デバイス操作
*-1 次の READ で入力バッファをクリアします。
*-2 TCP デバイスまたは名前付きパイプを切断します。"Caché 入出力デバイス・ガイド" の "TCP クライアント/サーバ通信" および "ローカル・プロセス間通信" を参照してください。
*-3 出力バッファをデバイスにフラッシュします。これにより、ディスク上のファイルへの書き込みが強制されます。
*-9 シーケンシャル・ファイルのコンテンツを、現在のファイル・ポインタの位置で切り捨てます。ファイルを切り捨てるには、そのファイルが開いている必要があります (少なくとも “RW” アクセスで OPEN コマンドを使用します)。また、現在のデバイスとして設定されている必要があります (USE コマンドを使用します)。"Caché 入出力デバイス・ガイド" の "シーケンシャル・ファイル入出力" を参照してください。
*-10 入力バッファを即座にクリアします。
*-99 圧縮されたストリーム・データを送信します。"Caché 入出力デバイス・ガイド" の "TCP クライアント/サーバ通信" を参照してください。

WRITE は、磁気テープ・デバイスのデバイス制御コードも多数サポートしています。それらのデバイス制御コードについては、"Caché 入出力デバイス・ガイド" の "磁気テープの入出力" の章で説明しています。

入力バッファの制御

*-1 および *-10 の制御は、ターミナル・デバイスからの入力に使用されます。これら制御は、READ コマンドによって受け入れられていない任意の文字の入力バッファを消去します。*-1 制御は、次の READ の入力バッファを消去します。*-10 制御は、入力バッファを直ちに消去します。WRITE *-1 または WRITE *-10 の呼び出し時に保留中の CTRL-C 中断が存在する場合、WRITE は、入力バッファの消去前にこの中断を破棄します。

入力バッファは、キーボードから送られた文字を保持します。また、ルーチンが READ コマンドを実行する前に、ユーザが入力した文字も保持します。このためユーザは、プロンプトが画面に表示される前であっても、応答を先行入力できます。READ コマンドがバッファから文字を取得するとき、Caché は、質問と応答を一緒に表示するように、ターミナルにエコー・バックします。ルーチンがエラーを検出すると、*-1 または *-10 制御を使用して、これらの先行入力された答えを削除できます。詳細は、"Caché 入出力デバイス・ガイド" の "ターミナル入出力" を参照してください。

TCP クライアント/サーバ通信での *-1 の使用法については、"Caché 入出力デバイス・ガイド" を参照してください。

出力バッファの制御

*-3 の制御は、出力バッファからデータをフラッシュするのに使用されます。これにより、物理デバイス上での書き込み操作が強制されます。つまり、まずデータがデバイス・バッファからオペレーティング・システムの入出力バッファにフラッシュされ、その後、オペレーティング・システムで、強制的にその入出力バッファが物理デバイスにフラッシュされます。この制御は一般に、ディスク上のシーケンシャル・ファイルに即座に書き込むことが強制される場合に使用されます。-3 は、Windows および UNIX プラットフォームでサポートされています。他のオペレーティング・システム上では、空命令となります。

TCP クライアント/サーバ通信での *-3 の使用法については、"Caché 入出力デバイス・ガイド" を参照してください。

以下の例の WRITE コマンドは、変数 var1 の現在の値を、現在の出力デバイスに送信します。

  SET var1="hello world"
  WRITE var1

以下の例の両方の WRITE コマンドは、pi に対する Unicode 文字を表示します。最初に $CHAR 関数を使用し、次に *integer 引数を使用します。

   IF $SYSTEM.Version.IsUnicode()  {
   WRITE !,$CHAR(960)
   WRITE !,*960
   }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

(上の例は、Caché の Unicode インストールが必要です。)

以下の例では、名前と姓の値を、それぞれに関連するラベル・テキストと共に書き込みます。WRITE コマンドは、同一の行の複数の引数を結合します。これは、その次の例にある 2 つの WRITE コマンドと同じです。! 文字は、改行を行う形式制御です。( ! 改行文字は、異なる 2 つの WRITE コマンドによってテキストが出力されるときに必要とされます。)

   SET fname="Bertie"
   SET lname="Wooster"
   WRITE "First name: ",fname,!,"Last name: ",lname

以下と同等です。

   SET fname="Bertie"
   SET lname="Wooster"
   WRITE "First name: ",fname,!
   WRITE "Last name: ",lname

以下の例では、現在のデバイスがユーザのターミナルであると仮定しています。READ コマンドで、ユーザに名前と姓を入力するように求め、入力値をそれぞれ変数 fname、および lname に保存します。WRITE コマンドは、ユーザが確認できるように、fname および lname の値を表示します。出力名を区切るために、スペース文字 ("") を含む文字列が含まれています。

Test
  READ !,"First name: ",fname
  READ !,"Last name: ",lname
  WRITE !,fname," ",lname
  READ !,"Is this correct? (Y or N) ",check#1
  IF "Nn"[check {
    GOTO Test 
  }

以下の例は、client(1,n) ノードの現在の値を書き込みます。

SetElementValues
   SET client(1,1)="Betty Smith"
   SET client(1,2)="123 Primrose Path"
   SET client(1,3)="Johnson City"
   SET client(1,4)="TN"
DisplayElementValues
   SET n=1
   WHILE $DATA(client(1,n)) { 
      WRITE client(1,n),! 
      SET n=n+1 
    }
    RETURN

このコマンドは、オブジェクト・プロパティの現在の値を書き込みます。

   WRITE person.LastName

person はオブジェクト参照、LastName はオブジェクト・プロパティ名です。ドット構文は、オブジェクト式で使用します。ドットは、オブジェクト参照とオブジェクト・プロパティ名あるいはオブジェクト・メソッド名の間に配置します。

以下のコマンドは、オブジェクト・メソッド TotalLines() が返す値を書き込みます。

   WRITE invoice.TotalLines()

オブジェクトに対する WRITE コマンドには、以下のようにカスケード・ドット構文を持つ式を使用できます。

   WRITE patient.Doctor.Hospital.Name

この例では、patient.Doctor オブジェクト・プロパティが Name プロパティを含む Hospital オブジェクトを参照します。そのため、このコマンドは指定した患者の医者と関連している病院名を書き込みます。同じカスケード・ドット構文は、オブジェクト・メソッドと一緒に使用できます。

オブジェクトの WRITE コマンドは、以下のデータ型プロパティ・メソッドのように、システム・レベル・メソッドで使用できます。

   WRITE patient.AdmitDateIsValid(date)

この例で、AdmitDateIsValid() プロパティ・メソッドは、現在の patient オブジェクトの結果を返します。AdmitDateIsValid() は、AdmitDate プロパティのデータ型検証のために作成されたブーリアン・メソッドです。そのため、このコマンドは指定した日付が有効な場合は 1 を、無効の場合は 0 を書き込みます。

すべてのオブジェクト式は、オブジェクト参照が参照するスーパークラス、あるいはクラスを宣言することによって指定できるということに注意してください。上述の例は以下のようにも記述できます。

   WRITE ##class(Patient)patient.Doctor.Hospital.Name
   WRITE ##class(Patient)patient.AdmitDateIsValid(date)

メモ

$X と $Y を使用した WRITE

WRITE は、式の評価から生成される文字を一度に 1 つずつ左から右の順に表示します。Caché は $X 特殊変数と $Y 特殊変数の現在の出力位置を記録します。 $X は現在の列位置を定義し、$Y は現在の行位置を定義します。1 文字表示されるたびに、$X は 1 つインクリメントされます。

以下の例では、WRITE コマンドは 11 字の文字列 Hello world を出力した後に列番号を与えます。

   WRITE "Hello world"," "_$X," is the column number"

表示された文字列と $X 値 (,"",$X) の間に空白スペースを入れると、評価前にその空白スペースで $X がインクリメントされます。空白スペースを $X (," "_$X) に連結すると空白スペースは表示されますが、評価前に $X の値がインクリメントされません。

連結された空白を使用しても、$X$Y の表示は、以下の例のように $X をインクリメントします。

   WRITE $Y," "_$X
   WRITE $X," "_$Y

最初の WRITE では、$X の値は $Y 値の桁数分インクリメントされます (ユーザの希望どおりでない場合があります)。2 番目の WRITE では、$X の値は 0 です。

$X を使用して、WRITE コマンド間に現在の列位置を表示することができます。WRITE コマンド間の列位置を制御するために、? 形式制御文字を使用することができます。? 形式文字は、$X が列 0 にあるときだけ意味を持ちます。以下の WRITE コマンドでは、? はインデントを行います。

   WRITE ?5,"Hello world",!
   WRITE "Hello",!?5,"world"

WRITE での形式制御の使用法

f 引数を使用すると、以下の任意の形式制御文字を含めることができます。ターミナルに出力する場合は、これらの制御によって、出力データの画面上の表示位置が決まります。形式制御文字は、任意の組み合わせで指定することができます。

! 形式制御文字

1 行進み、0 列目に配置されます ($Y は 1 ずつインクリメントされ、$X は 0 に設定されます)。実際の制御コード・シーケンスは、デバイスによって異なります。通常は ASCII 13 (RETURN)、または ASCII 13 と ASCII 10 (LINE FEED) です。

Caché は、引数付きの WRITE で暗黙の改行シーケンスを実行しません。ターミナルへの書き込み時に、! 形式制御文字を持つすべての WRITE を開始 (または終了) することをお勧めします。

! 形式制御は、複数指定することができます。例えば、5 行分進めるには WRITE !!!!! と記述します。! 形式制御と他の形式制御を組み合わせることもできます。しかし、!# または !,#、および ?5,! という組み合わせは、許可されてはいますが、多くの場合は意味がありません (!# または !,# は 1 行進めた後に新規の画面の最上部に配置し、$Y は 0 にリセットされます)。(5 でインデントし、1 行進めて、インクリメントを取り消す)。?5! の組み合わせは許可されていません。

現在のデバイスが TCP デバイスである場合、! は RETURN および LINE FEED を出力しません。代わりに、バッファに残っている文字をフラッシュし、ネットワークを通じてターゲット・システムへ送信します。

# 形式制御文字

CR (ASCII 13) 文字および FF (ASCII 12) 文字を純正 ASCII デバイスに送るのと同じ効果があります (正確な動作は、オペレーティング・システムのタイプ、デバイス、および記録形式により異なります)。ターミナル上では、# 形式制御文字により現在の画面が消去され、新しい画面の一番上の 0 列目から出力が開始されます ($Y$X は 0 にリセットされます)。

# 形式制御と他の形式制御を組み合わせることもできます。しかし、!# または !,#、および ?5,# という組み合わせは、許可されてはいますが、多くの場合は意味がありません (!# または !,# は 1 行進めた後に新規の画面の最上部に配置し、$Y は 0 にリセットされます。?5,# は、5 でインデントし、新規の画面の最上部に配置し、インクリメントは行わないことを意味しています)。?5# の組み合わせは許可されていません。

?n 形式制御文字

この形式制御は、疑問符 (?) の後に整数という形式か、整数に評価される式で構成されています。これは、n 番目の列位置で出力を配置し (列 0 からカウント)、$X をリセットします。この整数が現在の列位置よりも小さい、または同じ場合 (n<$X)、この形式制御は無効です。新規の列位置を設定するときに、$X 特殊変数 (現在の列) を参照できます。例えば、?$X+3 です。

/mnemonic 形式制御文字

この形式制御は、スラッシュ (/) の後にニーモニック・キーワードという形式か、(オプションで) ニーモニックに渡されるリスト・パラメータで構成されています。

/mnemonic(param1,param2,...)

Caché は、アクティブなニーモニック・スペースで定義されたエントリ・ポイントとして mnemonic を解釈します。この形式制御は、カーソルを画面に配置したり、磁気テープを巻き戻したりするデバイス関数を実行するために使用されます。アクティブなニーモニック空間がない場合は、エラーが返されます。mnemonic は、パラメータ・リストを必要とします (または必要としないこともあります)。

以下のいずれかの方法で、アクティブなニーモニック空間を設定できます。

  • 管理ポータルに進み、システム, 構成, デバイス設定, IO設定 を選択します。[ファイル]、[磁気テープ]、[その他]、または [ターミナル] のニーモニック・スペース設定を表示して編集します。

  • デバイスに対して OPEN コマンド、または USE コマンドを実行するときに /mnespace パラメータを含めます。

以下は、ニーモニック・デバイス機能の例です。

ニーモニック 概要
/IC(n) 現在のカーソル位置に n 文字分のスペースを挿入します。同じ行の残り部分は右に移動させます。
/DC(n) カーソルの右側の n 文字を削除し、その行を削除します。
/EC(n) カーソルの右側の n 文字を消去し、その代わりに空白を残します。

ニーモニックに関する詳細は、"Caché 入出力デバイス・ガイド" を参照してください。

一連の形式制御の指定

Caché では一連の形式制御を指定して、形式制御と式を分割できます。複数の形式制御のシーケンスを指定するとき、形式制御の間にコンマ区切り文字を置く必要はありません (コンマは許可されます)。コンマ区切り文字は、形式制御を式から区切る場合に必要です。

以下の例では、WRITE コマンドは、出力を 2 行進め、READ コマンドへの入力で設定された列位置に、最初の出力文字を配置します。

   READ !,"Enter the number: ",num
   SET col=$X
   SET ans=num*num*num
   WRITE !!,"Its cube is: ",?col,ans

出力する列は、READ で入力された文字数によって異なります。

WRITE で使用するエスケープ・シーケンス

WRITE コマンドは、READ コマンドと同様、エスケープ・シーケンスをサポートしています。エスケープ・シーケンスは通常、形式操作や制御操作に使用されます。エスケープ・シーケンスの解釈は、現在のデバイスの種類によって異なります。

エスケープ・シーケンスを出力するには、以下の形式を使用します。

   WRITE *27,"char"

*27 はエスケープ文字用の ASCII コードで、char は 1 つ、または複数の制御文字で構成されているリテラル文字列です。二重引用符は必須です。

例えば、現在のデバイスが、VT-100 互換のターミナルである場合、以下のコマンドは、現在のカーソル位置から行末までのすべての文字を消去します。

   WRITE *27,"[2J"

複数のプラットフォームで実行可能なプログラムがデバイスに依存しないようにするためには、プログラムの最初で SET コマンドを使用して、必要なエスケープ・シーケンスを変数に割り当てます。使用するプログラム・コードでは、実際のエスケープ・シーケンスの代わりに変数を参照することができます。他のプラットフォームとプログラムを適合させるには、SET コマンドで定義されたエスケープ・シーケンスに必要な変更を加えるだけです。

WRITE とその他の Write コマンドとの比較

WRITE を ZWRITEZZDUMP、および ZZWRITE コマンドと比較するには、"Caché ObjectScript の使用法" の “コマンド” の章の "表示 (書き込み) コマンド" 機能テーブルを参照してください。

関連項目

FeedbackOpens in a new tab