[前の記事]« NT系と95系のSETコマンドの仕様の違い
[次の記事]ATコマンドからのFTP実行がうまくいかない »

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

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

if文で比較可能な数値桁数を越える場合の処理


566) if文での数値比較桁数について とおる 2002/08/21(水) 12:06


はじめまして
Diskの空き容量を閾値と比較し警告を出すbatを作成しています。
dirの結果
29 個のディレクトリ 3,152,592,896 バイトの空き領域
から3152592896 を抜き出しif文で比較してもきちんとした
結果が得られません。
テストしてみると9桁まではOKで10桁からNGのようです。

何か良い方法は無いものでしょうか?



574) Re:if文での数値比較桁数について SYSOP 2002/08/28(水) 03:56


とおるさん こんにちは。

>Diskの空き容量を閾値と比較し警告を出すbatを作成しています。
>dirの結果
>29 個のディレクトリ 3,152,592,896 バイトの空き領域
>から3152592896 を抜き出しif文で比較してもきちんとした
>結果が得られません。
>テストしてみると9桁まではOKで10桁からNGのようです。

>何か良い方法は無いものでしょうか?

 どういう環境(Windowsのバージョン)で、どういった開発環境等が使用可能で、その「閾値」が具体的にどれくらいか……によりけりな気がします。

 そのへん、もう少し前提条件を詳しくお書きになってみては。

YanaKen


576) Re:if文での数値比較桁数について じゃく 2002/08/29(木) 19:26


とおるさんこんにちは。
>Diskの空き容量を閾値と比較し警告を出すbatを作成しています。
>dirの結果
>29 個のディレクトリ 3,152,592,896 バイトの空き領域
>から3152592896 を抜き出しif文で比較してもきちんとした
>結果が得られません。
>テストしてみると9桁まではOKで10桁からNGのようです。

3152592896を抜き出しと書いてあるところから、WindowsNT/2000系だと仮定して回答します。
当方 XPで実験しましたが10桁ではうまく比較できないことが
ありますね。

しかし、ディスクの空き容量チェックならば、文字列操作で、
下3桁をのぞいて数値化すれば、KB単位でのチェック、
下6桁をのぞけばMB単位のチェックができますが、
それではだめなのでしょうか?


785) Re:if文での数値比較桁数について vampire 2002/10/10(木) 12:44


>29 個のディレクトリ 3,152,592,896 バイトの空き領域
>から3152592896 を抜き出しif文で比較してもきちんとした
>結果が得られません。
>テストしてみると9桁まではOKで10桁からNGのようです。

>何か良い方法は無いものでしょうか?

バッチの標準コマンドでの数値比較は限界があるようですね。
そこで、AWKを使って比較処理をするコマンドを作ってみました。15桁の数値比較まで確認済みです。
参考になれば幸いです。

コマンドは以下のとおりです。

   jgawk "{if($1<$2)exit 1;else if($1>$2)exit 2;else exit 3}" numeric.txt
   if not errorlevel 4, if errorlevel 3, goto RC3
   if not errorlevel 3, if errorlevel 2, goto RC2
   if not errorlevel 2, if errorlevel 1, goto RC1
:RC3
左辺=右辺の処理

:RC2
左辺>右辺の処理

:RC1
左辺<右辺の処理


AWKはJGAWK(フリーソフト)を使います。
JGAWKは以下にあります。
http://www.vector.co.jp/soft/dos/util/se000208.html

比較する数値は、numeric.txtファイルに次のような形で取り込まれていることが条件です。

1234567890 1234567891

数値と数値の間は半角スペースを一つ以上置く。数値は半角であること。(コンマがあってはならない)

留意事項

●第1行の数値のみ比較する。2行目以降に数値を入力しても処理されない。
●比較可能な桁数はJGAWKの仕様に依存する(15桁までテストしましたがOKです)。
●数値以外が入力されている場合は、JGAWKがそれらをどのような値として評価するかに依存する。
●両辺が数値の場合、比較は「文字列比較」ではなく、「数値比較」を行う。したがって、"001"と"1"は等価、"+1"と"1.0"は等価となる。
●比較結果をリターンコードで返す。
 左辺<右辺 RC : 1
左辺>右辺 RC : 2
左辺=右辺 RC : 3

●リターンコードはexit文の値を変えることにより任意に設定が可能(0~255(10進値))。

テスト確認環境 MS-DOS(Ver 5), WinXP

this article refers Vector Soft Library..
 
 


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

 

カテゴリー一覧

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


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

資料書籍

About

2002年08月21日 10:04に投稿されたエントリーのページです。

ひとつ前の投稿は「NT系と95系のSETコマンドの仕様の違い」です。

次の投稿は「ATコマンドからのFTP実行がうまくいかない」です。

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

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