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 页面接受_XYZ_and _UVW_),而不是我硬编码value = ""每个页面上每次部分中的前缀值,有没有办法从文本文件(.txt)中捕获它并将其传递给 HTML 页面?我已经在页面上有一个 JavaScript 函数来自动点击“提交”按钮。如果可能的话,我宁愿在批处理中执行此操作,因为我的主程序是用它编写的,或者如果有人可以帮助我用 Java 甚至 PHP 提供它,我可以从批处理中取消。

文本框代码:

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

不过有一个问题。我需要将清理后的数据传递给 HTML 文本框....

所以目标:

  • 解析文本文件并查找具有_ABC_
  • 如果 line 为 false,则转到文本文件中的下一行(参见第 5 个项目符号),如果 line 为 true,则将值取到第三个下划线并将其捕获以传递给 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
)

五分钟的任务。首先清除所有名为 VAL* 的环境变量,获取列表并为变量中的 VALUE 数据构建字符串val_prefix

处理完文本文件后,在环境中查找 VAR*,抓取下划线后面的部分以用于输出文件名,删除数据项的前两个字符,即逗号空格并生成行文件。报告生成的 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 回答