ファイル入出力処理をスクリプトで記述する方法
これは InterSystems FAQ サイトの記事です。
ファイル入出力処理を行うには、ライブラリクラスを利用する方法が便利です。
ライブラリクラスを使用する以外には、Open/Use/Close コマンドを使用する方法もあります。<※1>
ファイル入出力処理には、%Library.Fileクラス、%Stream.FileCharacter/%Stream.FileBinary を使用します。
簡易例やプロパティ/メソッド詳細は、以下ドキュメントをご参照ください<※2>。
クラスリファレンス【IRIS】
クラスリファレンス
【補足】
%Libraryパッケージは、クラス定義構築基盤として利用するクラスが多いためパッケージ名を省略することができます。
(%Library.File は %File として利用できます)
【A】%Fileクラスを利用する方法
%Fileクラスには、ファイル入出力操作の他に、ディレクトリ作成(CreateDirectory()など)/存在チェック(Exists())/OS非依存でファイルパス取得(NormalizeFilename()など)が行える様々な便利メソッドを用意しています。
ファイル出力処理手順は以下の通りです。
(1) ファイル用オブジェクトを作成
ファイル名をフルパスで指定しながらファイル用オブジェクトを作成します。
set file=##class(%File).%New("c:\kit\text.txt")
(2) ファイルを新規書き込みモードを指定しながらオープン
N:新規作成、W:書込み、S:ストリーム形式
set st=file.Open("NWS")
【ご参考】指定の文字コード(例えば UTF-8)でファイル入出力を行う場合は、Kパラメータを使用します。
set st=file.Open("NWSK\UTF8\")
(3) ファイルへの書き込み
Write()メソッド:現在の位置に引数で指定した値を出力します。
WriteLine()メソッド:現在の位置に引数で指定した値を改行付きで出力します。
set st=file.WriteLine("1行目")
set st=file.WriteLine("2行目")
set st=file.WriteLine("3行目")
(4) ファイルをクローズ
do file.Close()
(5) オブジェクト消去
kill file
ファイル入力処理手順は以下の通りです。
(1) ファイルオブジェクトを作成
set file=##class(%File).%New("c:\kit\text.txt")
(2) ファイルを読み込みモードを指定しながらオープン
R:読込、S:ストリーム形式
set st=file.Open("RS")
(3) AtEndプロパティに 1 が設定されるまでファイルの読み込み
Read()メソッド:引数に指定した長さまで読み込み
ReadLine()メソッド:1行ずつ読み込み
※ AtEndプロパティはファイルの最後(EOF)を検出すると 1 が設定されるプロパティです。
【補足】ストリームの先頭位置に戻るには Rewind()、後方への移動は MoveToEnd() を使用します。
while '(file.AtEnd){ write file.ReadLine(),! }
(4) ファイルをクローズ
do file.Close()
(5) オブジェクト消去
kill file
【B】%Stream.FileCharacterを利用する方法
%Fileと異なる点は、ファイルオープン時にパラメータを使用しなくても利用できる点です。
ファイル出力処理手順は以下の通りです。
(1) ファイルオブジェクトを作成
set file=##class(%Stream.FileCharacter).%New()
(2) (1)で作成したオブジェクトのFilenameプロパティにオープン対象のファイルをフルパスで指定
set st=file.LinkToFile("c:\kit\text.txt")
【ご参考】指定の文字コードでファイル入出力を行う場合は、TranslateTableプロパティを利用します。
set file.TranslateTable="UTF8"
(3) ファイルへの書き込み
%File()と同様にWrite()/WriteLine()を使用します。
【補足】書き込み時、ストリームの後方へ位置を移動すると追記書き、先頭へ移動すると新規書き込みとして動作します。
(先頭位置から書き込みを行うと、以前登録のあった内容はクリアされ新規書き込みとして扱われます。)
後方移動には MoveToEnd() を使用します。
先頭へ戻るには Rewind() を使用します。
(4) ファイルの保存
set st=file.%Save()
(5) オブジェクト消去
kill file
<※1>コマンドでファイル入出力処理を行う方法は、以下ドキュメントをご参照ください。
シーケンシャルファイルの入出力について【IRIS】
シーケンシャルファイルの入出力について
<※2> クラスリファレンス(=クラスドキュメント)の開き方は以下の通りです。
[ランチャー] > [ドキュメント] > [クラスリファレンス]
スタジオから開く方法は以下の通りです。
スタジオの表示メニュー > [クラスドキュメントの表示]
以下のトピックもあわせてご覧ください。