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?

$ZSEARCH

指定したターゲット・ファイルの完全なファイル指定 (パス名とファイル名) を返します。

Synopsis

$ZSEARCH(target)
$ZSE(target)

パラメータ

target ファイル名、パス名、または NULL 文字列のいずれか。1 つ、または複数の * や ? ワイルドカード文字が含まれることもあります。

説明

$ZSEARCH は指定されたターゲット・ファイルまたはディレクトリの完全なファイル仕様 (パス名とファイル名) を返します。ファイル名にはワイルドカードを含む場合もあるため、$ZSEARCH はワイルドカードを満たす一連の完全修飾パス名を返します。

Note:

オペレーティング・システムによっては、ディレクトリ・パスの区切り文字としてスラッシュ (/) 文字が使用されます。バックスラッシュ (\) 文字を使用するオペレーティング・システムもあります。この説明では、“スラッシュ” という用語は必要に応じてスラッシュとバックスラッシュのいずれかを意味します。

target パラメータでパス名が指定されていない場合は、$ZSEARCH によって現在作業中のディレクトリ内が検索されます。$ZSEARCH は、以下の順番で一致プロセスの規則を適用します。

  1. $ZSEARCH は、target をスキャンして、パーセント文字 (%) で囲まれているか否かを確認します。このようなテキストを見つけた場合は、この文字列を環境変数として処理します。$ZSEARCH は、文字列の名前変換を実行します。

  2. $ZSEARCH は、前の手順で得られた文字列をスキャンして、最後のスラッシュを見つけます。最後のスラッシュが見つかった場合は、検索されるパスまたはディレクトリとして、最後のスラッシュの前の文字までの文字列を使用します。最後のスラッシュが見つからない場合は、現在作業しているディレクトリを検索します。これは、現在のネームスペースから決定します。

  3. 手順 2 で $ZSEARCH が最後のスラッシュを見つけた場合、最後のスラッシュの後に続く target 文字列の一部を、ファイル名検索パターンとして使用します。手順 2 で最後のスラッシュが見つからなかった場合は、手順 1 で得た文字列全体を、ファイル名検索パターンとして使用します。

ファイル名検索パターンは、正当なファイル名文字列あるいはファイル名のワイルドカード式です。検索パターンに一致する最初のファイル名は、$ZSEARCH 関数値として返されます。最初に一致したファイルがどれであるかは、プラットフォームに依存します (下記のメモ・セクションで説明しています)。

次回の $ZSEARCH の呼び出しで target として NULL 文字列を指定すると、$ZSEARCH は前回の target で続行され、検索パターンに一致する次のファイル名を返します。検索パターンに一致するファイルがない場合、$ZSEARCH は NULL 文字列を返します。

以下の例に示すように、%Library.FileOpens in a new tab クラスの NormalizeDirectory()Opens in a new tab メソッドを使用して、指定したファイルまたはディレクトリの完全なパス名が返されるようにすることもできます。

  NEW $NAMESPACE
  SET $NAMESPACE="SAMPLES"
  WRITE ##class(%Library.File).NormalizeDirectory("CACHE.DAT"),!
  NEW $NAMESPACE
  SET $NAMESPACE="USER"
  WRITE ##class(%Library.File).NormalizeDirectory("CACHE.DAT")

ただし、NormalizeDirectory() ではワイルドカードは使用できません。

ワイルドカード

$ZSEARCH では、引用符付きの target 文字列内で以下のワイルドカード式を使用できます。

ワイルドカード 一致
* 0 文字以上の文字列と一致。
? 1 文字と一致。Windows システムでは、名前要素の最後の 1 文字または 0 文字と一致します。

上記のワイルドカードは、ホスト・プラットフォームの使用規定に従います。Windows では、$ZSEARCH は大文字と小文字を区別せずに検索を実行し、検索したファイルまたはディレクトリの実際の文字を返します。例えば、“j*” は “JOURNAL”、“journal”、または “Journal” と一致する可能性がありますが、実際のディレクトリ名が “Journal” の場合は、“Journal” が返されます。

Windows および UNIX® システムでは、現在のディレクトリを指定する単一ドット (.) や、その親ディレクトリを指定する二重ドット (..) など、標準のパス名記号も使用できます。これらの記号は、ワイルドカードと組み合わせて使用できます。

パラメータ

target

target パラメータに使用できる値のタイプは、以下のとおりです。

target のタイプ 説明
pathname リストしたいファイル・グループ、またはファイルへのパスを指定する文字列に評価される式。
filename ファイル名。既定の位置は、現在のデータセットです。
NULL 文字列 ("") 前の $ZSEARCH の後、次に一致するファイル名を返します。

以下の Windows の例は、SAMPLES ネームスペースの中でファイル拡張子が “.DAT” で終了するすべてのファイルを検索します。

  NEW $NAMESPACE
  SET $NAMESPACE="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” で開始するすべてのファイルを検索します。

  NEW $NAMESPACE
  SET $NAMESPACE="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 パラメータは、ワイルドカード文字 (* と ?) を含む標準ファイル指定です。

  • * ワイルドカードはドットと一致させるのに使用できますが、? ワイルドカードは使用できません。したがって、"MYFILE*" は MYFILEFOLDER、MYFILE.DOC、および MYFILEBACKUP.DOC と一致しますが、"MYFILE?DOC" は MYFILE.DOC と一致しません。

  • ? ワイルドカードは、名前要素内の 0 文字とは一致しません。したがって、"MY?FILE.DOC" は MY2FILE.DOC とは一致しますが、MYFILE.DOC とは一致しません。

  • ? ワイルドカードは、名前要素の最後の 0 文字と一致します。余分な末尾の ? ワイルドカードは無視されます。したがって、"MYFILE?.DOC" は MYFILE2.DOC とも MYFILE.DOC とも一致します。

特にディレクトリを指定しなければ、現在作業中のディレクトリを使用します。$ZSEARCH はディレクトリで最初に一致したエントリを、アルファベット順に返します。これは完全ファイル指定、または完全修飾パス名を返します。ドライブ文字は、どのように指定したかに関係なく、常に大文字で返されます。

既定では、Windows ではファイル名拡張子の接尾語の最初の 3 文字だけがチェックされます。このため、$ZSEARCH("*.doc") では、.doc 接尾語を持つすべてのファイルだけでなく、.docx 接尾語を持つすべてのファイルも返されます。検索を .docx ファイルのみに制限する場合は、$ZSEARCH("*.docx") のように、4 文字の接尾語を指定する必要があります。末尾の ? ワイルドカードを使用して、4 文字以上の接尾語に検索を制限することはできません。

UNIX® のサポート

UNIX® では、target パラメータに UNIX® 標準のファイル指定を使用します。このパラメータでは、ワイルドカード文字 (* と ?) も使用できます。特にディレクトリを指定しなければ、現在作業中のディレクトリを使用します。

UNIX® では、$ZSEARCH は、ディレクトリ内の最初にアクティブなエントリを返します。UNIX® は、ディレクトリのエントリをアルファベット順に保存しないので、返り値はアルファベット順ではありません。Windows のプラットフォームとは異なり、$ZSEARCH 関数は現在作業中のディレクトリが使用されない限り、完全ファイル指定、または完全修飾パス名を返しません。

FeedbackOpens in a new tab