今回は、テキストファイルへの書き込みの解説になります。
はじめに
テキストファイルに書き込む方法はいくつかあります。
クラスを利用する方法(%Library.File.cls・%Stream.FileCharacter.cls等)や、openコマンドを利用する方法です。
今回は「%Stream.FileCharacter.cls」とopenコマンドについて解説します。
%Library.File.clsについては、下記を参照してください。
%Stream.FileCharacter.cls
簡単なサンプル
ClassMethod stmChar(filePath As %String, text As %String, charSet As %String = "UTF8")
{
try {
// メッセージの書き込み
s file = ##class(%Stream.FileCharacter).%New()
, file.Filename = filePath
, file.TranslateTable = charSet
d file.WriteLine(text)
$$$ThrowOnError( file.%Save() )
}catch e{
w !,$system.Status.DisplayError(e.AsStatus())
}
}
やっている事は下記になります。
- %Stream.FileCharacter.clsをインスタンス化する
- file.Filenameに、ファイル名称をフルパスでセットする
- 文字コードをセットする(任意) ※他:SJIS等
- 書き込むテキストをfile.WriteLine()で書き出す。 ※file.Write()でもOK
- file.%Save()で登録する
※「file.WriteLine()」は、文字列の末尾に改行コード($char(13,10))が付与されます。
BOMを付与する
文字コードUTF-8でBOMを付与する場合は、プロパティ「BOM」に「$char(239, 187, 191)」をセットします。
文字コードが「UnicodeLittle(16ビット)・UnicodeBig(16ビット)」であれば、BOMが自動的に付与されます。
ClassMethod BOMtext(filePath As %String, text As %String)
{
try {
// メッセージの書き込み
s file = ##class(%Stream.FileCharacter).%New()
, file.Filename = filePath
, file.TranslateTable = "UTF8"
, file.BOM = $c(239,187,191)
d file.WriteLine(text)
$$$ThrowOnError( file.%Save() )
}catch e{
w !,$system.Status.DisplayError(e.AsStatus())
}
}
追記する
ログ等は、1つのファイルに情報を追記していくタイプがあります。
「file.MoveToEnd()」を設定する事で、追記する事ができます。
ClassMethod addText(filePath As %String, text As %String, charSet As %String = "UTF8")
{
try {
// メッセージの書き込み
s file = ##class(%Stream.FileCharacter).%New()
, file.Filename = filePath
, file.TranslateTable = charSet
d file.MoveToEnd()
d file.WriteLine(text)
$$$ThrowOnError( file.%Save() )
}catch e{
w !,$system.Status.DisplayError(e.AsStatus())
}
}
openコマンド
ややこいのは面倒って時は、openコマンドで簡単にテキストを書き込むことが可能です。
下記がサンプルになります。
ClassMethod openCmnd(fileName As %String, text As %String, charSet As %String = "UTF8")
{
try {
s flg = "WN_$s(charSet'="":"K\"_charSet_"\", 1:"")
open fileName:(flg):5
use fileName
w text
close fileName
}catch e {
w !,$System.Status.DisplayError(e.AsStatus())
}
}
やっている事は実にシンプルで、開く・使う・書く・閉じるの4パターンです。
BOMを追加する
書き出しの前に、$char(239,187,191)を付ける!終わり!
追記する
Openコマンドにも追記モードがあります。
Nの新規ファイルに対し、Aは追記のパラメータになります。
ClassMethod openAddCmnd(fileName As %String, text As %String, charSet As %String = "UTF8")
{
try {
s flg = "WA"_$s(charSet'="":"K\"_charSet_"\", 1:"")
open fileName:(flg):5
use fileName
w text
close fileName
}catch e {
w !,$System.Status.DisplayError(e.AsStatus())
}
}
書き込みに関連するOpenパラメータを下記に記載します。
組み合わせて使用します。
文字コード | 説明 |
---|---|
N | 新規ファイルの作成。既存ファイルがある場合は削除して作成する。 |
E | ファイルが無い場合は作成する。既存ファイルは削除しない。 |
D | ファイルと閉じたときファイルを削除する。 |
L | 排他ロック。 |
A | 追記モード。 |
S | ストリームモード |
K\[name]\ | 文字変換モード。nameには「UTF8」や「SJIS」等を設定する。 |
おわりに
いかがだったでしょうか。
テキストを出力する機会は結構多いと思いますが、大体出力関数等を作成し、出力内容を引数に取る事が多いので、細かい仕様を忘れがちです。
そんな時は、この記事をみて思い出していただければ幸いです。