1

このエントリ (http://stackoverflow.com/questions/8513185/vbscript-to-correctly-re-format-a-delimited-text-file) を何度も読みましたが、まだ .Execute セクションを理解していません。

WScript.Echo oTDb.Execute(Replace("SELECT * FROM [@T]", "@T", sTbl1)) _
.GetString( adClipString, , "|", vbCrLf, "" )

私が苦労している部分は[@T]と「@T」です。

スキーマ ファイル内のファイル名を読み取っているのは "@T" であり、[@T] は代わりに "@T" を使用している必要があります。私が見つけられないのは、これが言及/話されている場所です。

私が持っているいくつかの追加の質問は次のとおりです。 1. ファイル名を変数で置き換えることができる場合、他に何ができますか? 2. 変数を維持するための規則は何ですか? @ 記号で始まらなければなりませんか? 予約語はありますか? @ 記号で始まらなければならない場合、次の文字は文字でなければなりませんか?

4

1 に答える 1

0

私は@Miltonの心配/困惑に責任があります:

VBScript には変数の補間/置換はありません。他の言語 (Perl など) は、置換を特殊な記号でマークすると、変数や式の結果を文字列リテラルにつなぎ合わせます。VBScript にはそのような面白い文字はありません。

SQL 方言では、置き換えられる部分が ? でマークされているパラメーター化されたコマンドを使用できます。および/または @ のような記号で始まる名前。しかし、ここで ADO は @T を認識しません。結果の文字列が .Execute() に送信される前に、 VBScript の Replace() 関数がテーブル名を補間しました。

連結によってパーツ (SQL ステートメント、.Run または .Exec のコマンドラインなど) から複雑な文字列を作成するのは面倒です。最も重要な欠点は、これらすべての " および &.

簡単な回避策は、次のように Replace() を使用することです。

[sResult = ] Replace("SELECT * FROM [@T]", "@T", sTbl1)

プレースホルダーを目立たせるために @ を使用しました。テンプレートでさらに置換が必要な場合は、Replace() 呼び出しをスタック/ネストする必要があるため、他の戦略を検討する価値があります。

  1. テンプレート文字列と置換の辞書を取って Regexp.Replace() を文字列に適用する関数を書く
  2. .NET の System.Text.StringBuilder とその .AppendFormat を使用して、sprintf のようなスタイルでスライスを行う
于 2013-01-20T10:37:54.637 に答える