0

複雑な質問なので、説明してみましょう....

次のような値のリストを含むテキスト ファイル (filelist.txt という名前) があります。

12_23_4_ABC_|
12_35_6_XYZ_|
12_36_5_ABC_|
12_37_9_UVW_|
12_38_8_XYZ_|
12_39_1_ABC_|

(pipe ( | ) is the delimiter)

値を入力して [送信] をクリックできるテキスト ボックスがある HTML ページ (ABCparser.html という名前) がありますが、この特定のページはプレフィックスの値のみを受け入れます(および_ABC_を受け入れる別の HTML ページがあります)。各ページの各時間の部分にプレフィックス付きの値をハードコーディングする代わりに、テキスト ファイル (.txt) からキャプチャして HTML ページに渡す方法はありますか? ページには、「送信」ボタンを自動的に押す JavaScript 関数が既にあります。私のメインプログラムはBatchで書かれているので、可能であればBatchでこれを行うことを好みます。または、バッチから呼び出すことができるJavaまたはPHPで提供するのを手伝ってくれる人がいれば。_XYZ__UVW_value = ""

テキスト ボックスのコード:

<input type="text" name="trackingId" size="100" value = "">

ただし、キャッチがあります。クリーンアップされたデータを HTML テキスト ボックスに渡す必要があります....

だから目的:

  • テキスト ファイルを解析し、_ABC_
  • line が false の場合、テキスト ファイルの次の行に移動します (5 番目の箇条書きを参照)。line が true の場合、3 番目のアンダースコアまでの値を取得し、それをキャプチャして HTML テキスト ボックスに渡します。ただし、前のアンダースコアをダッシュ​​に変換し、値を区切ります。コンマによって。
  • したがって、テキスト ボックスのコードは、前述の例では次のようになります。
    • <input type="text" name="trackingId" size="100" value = "12-23-4, 12-36-5, 12-39-1">
  • JavaScript 関数の自動送信、Web サービス呼び出しが正常に行われました。
  • 行が_XYZ_同じ手順を実行して「XYZparser.html」に_UVW_送信した場合、行が「UVWparser.html」に送信した場合
  • ユーザーはいつでも filelist.txt の数値を変更できますが、接尾辞は一定のままです (つまり、後で実行すると、ユーザーは 12_23_4_ABC_ を送信したくない場合があり、13_87_1_ABC_ を見たい場合があります)。
4

2 に答える 2

2
@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR /f "delims==" %%i IN ('set val 2^>nul') DO (SET %%i=)
FOR /f "tokens=1-4delims=_" %%a IN (filelist.txt) DO (
SET val_%%d=!val_%%d!, %%a-%%b-%%c
)
FOR /f "tokens=2,3delims=_=" %%i IN ('set val 2^>nul') DO (
SET list=%%j
SET list=!list:~2!
>%%iparser.html ECHO ^<input type="text" name="trackingId" size="100" value = "!list!"^>
ECHO generated %%i parser
)

5分間のタスク。最初に VAL* という名前の環境変数をすべてクリアし、リストを取得して変数内の VALUE データの文字列を作成しますval_prefix

テキスト ファイルが処理されたら、環境内で VAR* を探し、出力ファイル名で使用するためにアンダースコアに続く部分を取得し、データ項目の最初の 2 文字 (コンマ スペース) を削除して、次の行を生成します。ファイル。HTML ファイルの生成を報告する - トリガーする必要があるものをトリガーするために使用できます。

プログラムよりも文書化に時間がかかりました...


改訂仕様の修正

@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR /f "delims==" %%i IN ('set val 2^>nul') DO (SET %%i=)
FOR /f "tokens=1-5delims=_|" %%a IN (filelist.txt) DO (
 IF "%%e"=="" (SET val_%%d=!val_%%d!, %%a-%%b-%%c) ELSE (
               SET val_%%d_%%e=!val_%%d_%%e!, %%a-%%b-%%c)
)
FOR /f "tokens=1,2delims==" %%i IN ('set val 2^>nul') DO (
SET html=%%i
SET html=!html:*_=!parser.html
SET list=%%j
SET list=!list:~2!
>!html! ECHO ^<input type="text" name="trackingId" size="100" value = "!list!"^>
ECHO generated !html!
)

OP版とほぼ同じ。の設定の小さな違いですが%%e、それはスタイルの問題です。

ただし、HTML ファイルを生成する簡単な方法 - 少しこっそりと。はFOR単に名前を値から分割します。名前を扱うと、それval_somethingを変数に適用する形式になるので(文字列操作はメタ変数で直接実行できません)、最初の文字までのすべての文字を取得して変更します!html:*_=!(間の文字または文字列と)の後の文字に- この場合は何もないので、先頭が削除されます (まあ、すべての変数が開始されることがわかっているので、簡単に使用できます- 一般的なテクニックと特定のテクニックの問題)var_something_*==..._var..var_!html:~4!

したがって、parser.htmlここに を追加するかどうかは選択の問題です。

...利害関係者のための別のアプローチの問題...

于 2013-04-17T20:17:07.437 に答える
0

ピーターの答えは本当に役に立ちました!いくつかの追加のユースケースに基づいて、いくつかの変更を行いました。これが私の答えです....

@ECHO ON
SETLOCAL enabledelayedexpansion
FOR /f "delims==" %%i IN ('set val 2^>nul') DO (SET %%i=)
FOR /f "tokens=1-5delims=_" %%a IN (filelist.txt) DO (
    IF "%%e"=="|" (
        SET val_%%d=!val_%%d!, %%a-%%b-%%c
    )   ELSE (
        SET val_%%d_%%e=!val_%%d_%%e!, %%a-%%b-%%c
    )
)

FOR /f "tokens=2-4delims=_=" %%i IN ('set val 2^>nul') DO (
    IF "%%k"=="" (
        SET list=%%j
        SET list=!list:~2!
        >%%i_parser.html ECHO ^<input type="text" name="trackingId" size="100" value = "!list!"^>
        ECHO generated %%i parser
    )   ELSE (   
        SET list=%%k
        SET list=!list:~2!
        >%%i_%%j_parser.html ECHO ^<input type="text" name="trackingId" size="100" value = "!list!"^>
        ECHO generated %%i_%%j parser
    )
)
于 2013-04-18T00:59:25.257 に答える