3

Stata に数行のコードがあります。行が参照する .txt ファイルがアプリオリに存在する場合にのみ、行を実行したいと思います。ifステートメント に埋め込むことができる、これに使用できるシェルコマンドがあるかどうか疑問に思っています。

たとえば、次のようなものが存在し、可能である可能性があります。

 insheet using "file.txt" if ('file.txt')

私の意図は、ファイルが存在する場合にのみinsheetファイルを言うことです。私の懸念は、そのステートメントを持っていてもファイルが存在しないfile.txt場合、構文エラーのためにプログラムが停止、失敗、停止、またはあなたがそれを呼び出すものは何でもそうするということです。insheet

4

2 に答える 2

4

当面の答えはノーです。いくつかの理由から、その構文のようなものはありません。

  1. 修飾子は、観測ごとに特定のif条件が真であるかどうかを個別にテストし、ファイルが存在するかどうかは、観測ごとに観測をテストするための適切な条件ではありません。

  2. まったく異なるifコマンドは、何かが真であり、より適切に見えるかどうかを 1 回だけテストします。実際には、この目的には使用されませんが、詳細については、 を参照してくださいhelp ifcmd

  3. Stata には、対になった同一の一重引用符に基づく特別な構文はありません' '

ただし、Stata はここで別の構造を提供します。

confirm file file.txt 

実際には、ファイルが存在せず、ファイルが存在しない場合は常に do ファイルまたはプログラムを停止します。エラーをキャッチする一般的なスキームは次のようなものです

capture confirm file file.txt 
if _rc == 0 insheet using file.txt 
else { 
    <code if the file does not exist> 
} 

captureconfirmコマンドからの戻りコードを食べると考えるべきです。_rc一般に、コマンドが有効で実行された場合、コマンドからの戻りコードは 0 であり、それ以外の場合はゼロ以外の値です。特定のゼロ以外のコードをテストする場合があります。実験では、file not foundリターン コード 601 が示されています。エラー コード ([P] エラーで) を検索する主な理由は、公式に見えるエラー メッセージを表示することですが、実際には、ゼロ/ゼロ以外のルールを知ることが、この見出しの下の主な詳細です。 .

ここの例は==、等しいかどうかをテストするために使用します。

insheet using file.txtファイルが存在しない場合、厳密には構文エラーではないことに注意してください。Stata の言語に関する限り、それは合法的な構文です。ただし、これは細かい区別です。通常の意味でのエラーです。

(後で)プロセス全体を短絡することが可能です

 capture insheet using file.txt 
 if _rc != 0 { 
      <code if the file does not exist>
 }

この場合、ファイルが存在しないことは、insheetコマンドの失敗の推定説明です。ただし、varlistやオプションを使用insheetして呼び出しがより複雑な場合は、他の理由でコマンドが失敗する可能性があります。したがって、一般に、ファイルの存在のチェックを分離することは、より良い戦略のようです。

于 2013-07-01T23:32:01.263 に答える
3

コマンドには、confirm探しているものが含まれています。

capture confirm file "file.txt"
if !_rc {  # if the file exists, confirm will return error code 0
    insheet using "file.txt"
}

captureまたは、コマンドの前に a を置くこともできinsheetます。これにより、構文エラーがキャッチされます。captureおよびの詳細については、[P] マニュアルを確認してくださいconfirm

于 2013-07-01T23:31:49.857 に答える