ホーム|管理ポータル|インデックス
Caché ObjectScript リファレンス
$ZSEARCH
« »
   
サーバ:docs.intersystems.com
インスタンス:CACHE20131J
ユーザ:UnknownUser
 
-
移動:
検索:    

指定したターゲット・ファイルの完全なファイル指定 (パス名とファイル名) を返します。
Synopsis
$ZSEARCH(target)
$ZSE(target)
パラメータ
target ファイル名、パス名、または NULL 文字列のいずれか。1 つ、または複数の * や ? ワイルドカード文字が含まれることもあります。
説明
$ZSEARCH は指定されたターゲット・ファイルまたはディレクトリの完全なファイル仕様 (パス名とファイル名) を返します。ファイル名にはワイルドカードを含む場合もあるため、$ZSEARCH はワイルドカードを満たす一連の完全修飾パス名を返します。
target パラメータでパス名が指定されていない場合は、$ZSEARCH によって現在作業中のディレクトリ内が検索されます。$ZSEARCH は、以下の順番で一致プロセスの規則を適用します。
  1. $ZSEARCH は、target をスキャンして、パーセント文字 (%) で囲まれているか否かを確認します。このようなテキストを見つけた場合は、この文字列を環境変数として処理します。$ZSEARCH は、文字列の名前変換を実行します。
  2. $ZSEARCH は、手順 1 で得られた文字列をスキャンして、最後のスラッシュ文字を見つけます。最後のスラッシュが見つかった場合は、検索されるパスまたはディレクトリとして、最後のスラッシュの前の文字までの文字列を使用します。最後のスラッシュが見つからない場合は、現在作業しているディレクトリを検索します。これは、現在のネームスペースから決定します。
  3. 手順 2 で $ZSEARCH が最後のスラッシュを見つけた場合、最後のスラッシュの後に続く target 文字列の一部を、ファイル名検索パターンとして使用します。手順 2 で最後のスラッシュが見つからなかった場合は、手順 1 で得た文字列全体を、ファイル名検索パターンとして使用します。
ファイル名検索パターンは、正当なファイル名文字列あるいはファイル名のワイルドカード式です。検索パターンに一致する最初のファイル名は、$ZSEARCH 関数値として返されます。最初に一致したファイルがどれであるかは、プラットフォームに依存します (下記のメモ・セクションで説明しています)。
次回の $ZSEARCH の呼び出しで target として NULL 文字列を指定すると、$ZSEARCH は前回の target で続行され、検索パターンに一致する次のファイル名を返します。検索パターンに一致するファイルがない場合、$ZSEARCH は NULL 文字列を返します。
以下の例に示すように、%Library.File クラスの NormalizeDirectory() メソッドを使用して、指定したファイルまたはディレクトリの完全なパス名が返されるようにすることもできます。
  ZNSPACE "SAMPLES"
  WRITE ##class(%Library.File).NormalizeDirectory("CACHE.DAT"),!
  ZNSPACE "USER"
  WRITE ##class(%Library.File).NormalizeDirectory("CACHE.DAT")
 
ただし、NormalizeDirectory() ではワイルドカードは使用できません。
ワイルドカード
$ZSEARCH では、引用符付きの target 文字列内で以下のワイルドカード式を使用できます。
ワイルドカード 一致
* 0 文字以上の文字列と一致。
? 任意の文字に一致。OpenVMS システムでは、このワイルドカードは % 文字です。
上記のワイルドカードは、ホスト・プラットフォームの使用規定に従います。Windows では、$ZSEARCH は大文字と小文字を区別せずに検索を実行し、検索したファイルまたはディレクトリの実際の文字を返します。例えば、“j*” は “JOURNAL”、“journal”、または “Journal” と一致する可能性がありますが、実際のディレクトリ名が “Journal” の場合は、“Journal” が返されます。
Windows および UNIX® システムでは、現在のディレクトリを指定する単一ドット (.) や、その親ディレクトリを指定する二重ドット (..) など、標準のパス名記号も使用できます。これらの記号は、ワイルドカードと組み合わせて使用できます。
パラメータ
target
target パラメータに使用できる値のタイプは、以下のとおりです。
target のタイプ 説明
pathname リストしたいファイル・グループ、またはファイルへのパスを指定する文字列に評価される式。
filename ファイル名。既定の位置は、現在のデータセットです。
NULL 文字列 ("") 前の $ZSEARCH の後、次に一致するファイル名を返します。
以下の Windows の例は、SAMPLES ネームスペースの中でファイル拡張子が “.DAT” で終了するすべてのファイルを検索します。
   ZNSPACE "SAMPLES"
   SET file=$ZSEARCH("*.DAT")
   WHILE file'="" {
       WRITE !,file
       SET file=$ZSEARCH("")
   }
   WRITE !,"That is all the matching files"
   QUIT
 
これは、以下を返します。
C:\InterSystems\Cache\Mgr\Samples\CACHE.DAT
以下の Windows の例は、SAMPLES ネームスペースの中で文字 “c” で開始するすべてのファイルを検索します。
   ZNSPACE "SAMPLES"
   SET file=$ZSEARCH("c*")
   WHILE file'="" {
       WRITE !,file
       SET file=$ZSEARCH("")
   }
   WRITE !,"That is all the matching files"
   QUIT
 
これは、以下を返します。
C:\InterSystems\Cache\Mgr\Samples\CACHE.DAT
C:\InterSystems\Cache\Mgr\Samples\cache.lck
メモ
ディレクトリのロック
適切な結果を返すため、$ZSEARCH がすべてのファイルをディレクトリに返すまで (つまり、$ZSEARCH が NULL 文字列を返すまで、または新規の $ZSEARCH が開始するまで) プロセスはそのディレクトリを開いたままにしておきます。これは、ディレクトリの削除などの他の処理を妨げる可能性があります。$ZSEARCH を開始するとき、$ZSEARCH("") が NULL 文字列を返すまで繰り返します。また、すべてのファイルを検索したくないい場合は、$ZSEARCH(-1) などの、存在しないファイル名で $ZSEARCH を実行します。
Windows のサポート
Windows では、target パラメータは、ワイルドカード文字 (* と ?) を含む標準ファイル指定です。Windows システムでは、* ワイルドカードはドットと一致させるために使用できますが、? ワイルドカードは使用できません。名前要素内では、? ワイルドカードはゼロ文字に一致することができません。しかし名前要素の最後では、? ワイルドカードがゼロ文字に一致するときは無視されます。
特にディレクトリを指定しなければ、現在作業中のディレクトリを使用します。$ZSEARCH はディレクトリで最初に一致したエントリを、アルファベット順に返します。これは完全ファイル指定、または完全修飾パス名を返します。ドライブ文字は、どのように指定したかに関係なく、常に大文字で返されます。
Windows NT では検索実行時に、ファイル名拡張子の接尾語の最初の 3 文字だけがチェックされます。このため、$ZSEARCH("*.txt") では、a.txtfred.txt だけではなく、a.txt2fred.txta なども返されることになります。
UNIX® のサポート
UNIX® では、target パラメータに UNIX® 標準のファイル指定を使用します。このパラメータでは、ワイルドカード文字 (* と ?) も使用できます。特にディレクトリを指定しなければ、現在作業中のディレクトリを使用します。
UNIX® では、$ZSEARCH は、ディレクトリ内の最初にアクティブなエントリを返します。UNIX® は、ディレクトリのエントリをアルファベット順に保存しないので、返り値はアルファベット順ではありません。Windows のプラットフォームとは異なり、$ZSEARCH 関数は現在作業中のディレクトリが使用されない限り、完全ファイル指定、または完全修飾パス名を返しません。
OpenVMS のサポート
OpenVMS では、target パラメータは、ワイルドカード文字 (* と %) を含む標準 OpenVMS ファイル仕様です。特にディレクトリを指定しなければ、現在作業中のディレクトリを使用します。OpenVMS には、環境変数の置換や target のスラッシュ文字のスキャン機能はありません。
OpenVMS では、$ZSEARCH は、ディレクトリで最初にアクティブなエントリを返します。$ZSEARCH は、デバイスとディレクトリを含む、完全ファイル指定を返します。