0

私はファイルを解析しようとし、タグ内のすべての列の番号を検出する必要があります。私は検出する必要があります:

  1. 番号がある場合
  2. 数字が1〜3桁の場合。
  3. 開始、終了、または分離されたドットに単一のドットがある場合(文字列置換を使用して、ドットの最後の2つの検出を実行できますが、数字の検出はわかりません)。

タグ内のデータを抽出するforループがすでにあります。

for %%Z in (hide_2.htm) do (
    for /F "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 delims=<>" %%A on ('grep -B 1411 -E "</table>" %%Z ^| grep -E ^"^(display^|^^\d\d{1,3}^|country^|^<td^>HTTP^|rightborder^).*$^" ') do (
        echo A:%%A + %%B + %%C + %%D + %%E + %%F + %%G + %%H + %%I + %%J + %%K + %%L
        pause
    )
)

入力は次のとおりです。A:+ td + span + span + 41 + / span + span style = "display:none;" + 111 + / span + div + +
A:style = "display:none;" + 190 + / div + span class = "" style =""+ + / span + span + 197 + / span + span + +
A:style = "display:none;" + 24 + /span+スパン+/span+ + span style = "display:+ + + + +
A:inline;" + 132 + / span + span style = "display:none;" + 39 + /span+ +スパン+++ +
A:style = "display:inline;" + 186 + / span + / span + / td + + + + + + +
A:+ td rel = "rw" + span class = "country" + img + + + + + + + +
A:+ td + HTTPS + / td + + + + + + + +

ソースデータはここから取得されます。

編集: 最良の方法は、2つの変数を保持することです。数値を保持するための1番目の変数、およびドットまたはドットが存在する場合はフラグを保持するための2番目の変数。

Edit2: 入力値は次のようになります:120,132,186,24,111,41、。、または.120、.132、.186、.24、.111、.41...値は任意の列に含めることができます。

Edit3: 番号は常に列の最後にあります。また、ドットは最初に置くことができますが、数値変数の結果に含めることはできません。

4

2 に答える 2

1
set "$=0" &if defined $ if !$! equ +!$! echo. isNumber: '!$!'
set "$=NaN" &if defined $ if !$! equ +!$! echo. isNumber: '!$!'

if "%VAR%" neq "" if %VAR% equ +%VAR% echo. %VAR% is a number.

Ed Dyreenによる解決策、ありがとう!

于 2012-06-16T15:55:46.917 に答える
0

おそらく最も簡単で柔軟な方法は、次のfindstrコマンドを使用することです。

@echo off
set "_VALUE=%~1" & rem // (take value from first command line argument)

cmd /V /C echo(!_VALUE!| > nul findstr /R /X ^
    /C:"00*" /C:"[-+]00*" ^
    /C:"[123456789][0123456789]*" ^
    /C:"[-+][123456789][0123456789]*" ^
    && echo The value "%_VALUE%" is numeric.

複数の検索文字列を指定できます。値が数値と見なされるには、そのうちの1つが一致する必要があります。

追加のcmdインスタンスは、遅延拡張を有効にすることを目的としています。これは、たとえば、不均衡な引用符や、などの特殊文字を使用しても、任意の文字列/Vをすべて実行できるようにするために必要です。そのようなことが起こらない場合は、その部分を。に置き換えることができます。echo^&cmd /V /C echo(!_VALUE!echo(%_VALUE%

于 2017-04-13T00:03:55.510 に答える