[前の記事]« [Win2000] ユーザ入力値の取得
[次の記事][NT系]"&"などの特殊記号を含むファイルの文字列の置換方法 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「IF(結果の検査、条件分岐)」索引へ

NT4:FOR文内の「IF」構文が期待通りに動作しない


436) for文内のif文について すず 2003/07/16(水) 17:21


教えてほしいです。

次のようなことをやりたいのですが、
なぜだかできません。

・ファイルAにある数値と、指定した数値を比較して、
指定した数値より大きい数値を含む一行のみを取得して、別ファイルを作成

ex)
ファイルA(a.txt)
ABC_102
EFG_99
HIJKL_12
MNOP_49
Q_32

私が作成したバッチファイル
@echo off
for /f "tokens=1-2 delims=_ " %%i in (a.txt) do if %%i GEQ 50 echo %%i_%%j

しかし、これでは、できませんでした。

御願いします。

OS : WinNT4.0

437) Re:for文内のif文について じゃく 2003/07/16(水) 17:47


>教えてほしいです。

>次のようなことをやりたいのですが、
>なぜだかできません。

>・ファイルAにある数値と、指定した数値を比較して、
> 指定した数値より大きい数値を含む一行のみを取得して、別ファイルを作成

> ex)
> ファイルA(a.txt)
> ABC_102
> EFG_99
> HIJKL_12
> MNOP_49
> Q_32

> 私が作成したバッチファイル
> @echo off
> for /f "tokens=1-2 delims=_ " %%i in (a.txt) do if %%i GEQ 50 echo %%i_%%j

> しかし、これでは、できませんでした。

どうなったか書かれていませんが、比較するのは数値なので、
> for /f "tokens=1-2 delims=_ " %%i in (a.txt) do if %%i GEQ 50 echo %%i_%%j
の行の
 if %%i GEQ 50

 if %%j GEQ 50
ではないですか?


442) Re2:for文内のif文について ふぇむ 2003/07/16(水) 20:04


> if %%j GEQ 50
>ではないですか?

すみません、じゃく さんの方でもうコメント済みの内容だったんですね。ろくに前の方読まずにコメントしてしまいました。
重複してしまってごめんなさい。




444) Re3:for文内のif文について じゃく 2003/07/17(木) 07:45


>すみません、じゃく さんの方でもうコメント済みの内容だったんですね。ろくに前の方読まずにコメントしてしまいました。
>重複してしまってごめんなさい。

いえいえ。ふぇむさんもほぼ同じ時間で回答してますね(^^)
それよりすずさんが、解決されたのか気になりますね。


445) Re4:for文内のif文について すず 2003/07/17(木) 09:54


>それよりすずさんが、解決されたのか気になりますね。
すみません、昨日返信したつもりが、何も記述していませんでした・・・。

お二人が御指摘された通り%%i は %%j の間違えです。。。

私が、記述したfor文ですと、何も動作せず終了されます。

よろしくお願いします。


450) Re5:for文内のif文について ふぇむ 2003/07/19(土) 02:29


>私が、記述したfor文ですと、何も動作せず終了されます。

Win2000では動きそうなので、NT4.0 ではできない何かが含まれているのではないでしょうか?
手元に NT4.0 の環境を持たないので、NT4.0の for 文にどこまで表現力があったか検証できないのですが、まずとりあえずその環境で for /? でヘルプを見てみて、使えない表現が混じってないか見てはどうでしょう。

そこに問題がないなら、@echo off をとってしまって、実行時にどのように解釈されているかを目視してみてはどうでしょうか。案外実際のスクリプト上につまらないミスがあるのかもしれません。

gawk.exe が使えれば、OSにあまり依存せず、この場合だと

gawk -F _ "$2 >= 50" a.txt

だけで済むのですが.... (フィールドセパレータを _ にして、a.txt の各行にて、2つめのフィールドが50以上の行を表示、という意味)



451) Re6:for文内のif文について ふぇむ 2003/07/19(土) 11:46


>>私が、記述したfor文ですと、何も動作せず終了されます。

if 文か不成立だったときに for 文全体を終わってしまうのかも?
もしそうだとすると、たとえば、for 文の do 以降の実行部を別のサブルーチン(:label 行で始まり goto :eof でおわるブロック)にして、つまり以下のような形にするとうまくいくかも?

for /f "tokens=1-2 delims=_" %%i in ( a.txt ) do (
call :check %%i %%j
)

goto :end

:check
if %2 GEQ 50 echo %1_%2
goto :eof

:end



439) Re:for文内のif文について ふぇむ 2003/07/16(水) 17:51


> for /f "tokens=1-2 delims=_ " %%i in (a.txt) do if %%i GEQ 50 echo %%i_%%j

この if %%i は if %%j の間違いだと思いますが、そういうことではなくて?
どういう現象が出ました?


  • ◆436.  for文内のif文について (すず)   2003/07/16(水) 17:21
    •  437.  Re:for文内のif文について (じゃく)   2003/07/16(水) 17:47
      •  442.  Re2:for文内のif文について (ふぇむ)   2003/07/16(水) 20:04
        •  444.  Re3:for文内のif文について (じゃく)   2003/07/17(木) 07:45
          •  445.  Re4:for文内のif文について (すず)   2003/07/17(木) 09:54
            •  450.  Re5:for文内のif文について (ふぇむ)   2003/07/19(土) 02:29
              •  451.  Re6:for文内のif文について (ふぇむ)   2003/07/19(土) 11:46
    •  439.  Re:for文内のif文について (ふぇむ)   2003/07/16(水) 17:51
      •  440.  Re2:for文内のif文について (すず)   2003/07/16(水) 18:22
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「IF(結果の検査、条件分岐)」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年07月16日 11:28に投稿されたエントリーのページです。

ひとつ前の投稿は「[Win2000] ユーザ入力値の取得」です。

次の投稿は「[NT系]"&"などの特殊記号を含むファイルの文字列の置換方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート