リンク
インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
逆引きCache' Object ScriptCache' Object Script
文字列 数値 ファイル 日時 ユーティリティ ファイルテキストファイルを読む
テキストファイルを読む処理は、次のように書くことが多いです。
「★処理を記述」 の部分で、読み込んだ1行ごとの内容が変数lineに入った状態になっているので、必要な処理を記述します。
テキストファイルを読む際に終端をエラートラップ以外の方法で取得
デフォルトではファイルの終端で読込みを行うと<ENDOFFILE>エラーが発生することでファイルを最後まで読み取ったことを知りますが、
Do ##class(%SYSTEM.Process).SetZEOF(1) して、ファイル終端になると$ZEOF=1となることで検出することができます。
または、構成マネージャ→詳細→その他→<ENDOFFILE>エラーの代わりに$ZEOFを設定する をオン にします。 テキストファイルを書く
標準の文字コード以外のテキストを処理する
標準の文字コードはNLSとデバイスによって決定されます。 変換テーブルの追加も、bin\CNLS.exe→テーブルの追加からできそうです。 ファイルの存在確認
##class(%File).Exists(fullpath) を使用します。
If ##class(%File).Exists("C:\autoexec.bat")="" { Write "ファイルがあります",! } Else { Write "ファイルがありません",! } $ZSEARHコマンドは閉じる処理を忘れがちなので、使用しないほうが良いでしょう。 $ZUtil(140,4,fn)などでも可能です フルパスからファイル名の取得
##Class(%File).GetFilename(fullPath)を使用します。
ファイルの削除
##Class(%File).Delete(fullPath)を使用します。
もしくは CloseのDオプションで削除できます。Closeするためには、Openしておく必要があります。
ファイル名の変更 / ファイルの移動
CloseのRオプションで名前変更やファイルの移動が可能です。Closeするためには、Openしておく必要があります。
一時ファイル名の取得
##Class(%File).TempFilename()を使用します。
拡張子を指定したい場合は引数にセットします。
ファイルのハッシュ値を取得
ストリームを経由してハッシュ値を取得できます。
> Set sid=##class(%FileCharacterStream).GetStreamIdForFile("C:\test.txt") > Set stm=##class(%FileCharacterStream).%Open(sid) > Set bs=$SYSTEM.Encryption.SHA1HashStream(stm) > Write bs ïà ú¤Ðw7w©¡d // バイト文字列なので文字化けしています、16進文字列にするには以下の方法で > Set hexStr="" For i=1:1:$L(bs) Set hexStr=hexStr_$TR($J($ZHEX($A($E(bs,i))),2)," ",0) > Write hexStr B4C31C856EF8420FAA49BF8D07773777A9A164 // SHA-1ハッシュ値 16進文字列 // MD5の場合 > Set bs=$SYSTEM.Encryption.MD5HashStream(stm) // stmは上で取得している > Set hexStr="" For i=1:1:$L(bs) Set hexStr=hexStr_$TR($J($ZHEX($A($E(bs,i))),2)," ",0) > Write hexStr 1B4AEA199D581C8084B41A1F2C581AA ver2013以降、SHA1用のメソッドが追加されました。こちらの方法だとストリームを用意する必要がないので楽です。 USER>Write ##class(%File).SHA1Hash("C:\test.txt") ïà ú¤Ðw7w©¡d // バイト文字列なので文字化けしています、16進文字列にするには上の方法か、 USER>Write ##class(%File).SHA1Hash("C:\test.txt", 1) //第二引数に1をセットします。 B4C31C856EF8420FAA49BF8D07773777A9A164 ファイルの属性取得
##class(%File)を使用します。
ファイルサイズ ##class(%File).GetFileSize(フルパス) 修正日時 ##class(%File).GetFileDateModified(フルパス) 作成日時 ##class(%File).GetFileDateCreated(フルパス) 属性ビットマップ ##class(%File).Attributes(フルパス) 属性で取得できるのは、読み込み専用・隠しファイルなどです。 もしくは $ZUtil(140,n)を使用します。オプションはヘルプを参照してください。 Set fn="C:\1.txt" Write "ファイルサイズ ",$ZUtil(140,1,fn),"byte",! Write "修正日時 ",$ZDT($ZUtil(140,2,fn),3),! Write "作成日時 ",$ZDT($ZUtil(140,3,fn),3),! Write "属性ビットマップ",$ZUtil(140,7,fn),! その他の処理
ファイル(ディレクトリ)周りの処理は$ZF(-1,cmd)でOSのコマンドを実行することで、たいていのことが可能です。
アクセスできないとき
ファイルにアクセスできないというときは、ファイルのアクセス権について確認してください。
windowsの場合、Cache'は通常"ローカルシステムアカウント"で起動しています。 このユーザに対象ファイルのアクセス権がない場合、各種ファイル操作は失敗してしまいます。 特に他のマシンの共有を見るような場合にご注意下さい。 Cache'がどのアカウントで起動しているかは、マイコンピューターを右クリック→管理→サービスとアプリケーション→サービス→Cache'を右クリック→プロパティ→ログオン から確認できます。 |