[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.095 On Error Resume Next でエラー発生時次の行へ

On Error Resume Next でエラー発生時次の行へ



本文(発行内容)


On Error Resume Next でエラー発生時次の行へ

こんにちは、三流プログラマーのKen3です。

今回は、
On Error Resume Next でエラー発生時次の行へ
そんな処理を書いてみます。

/* * 1.今回のキッカケ */

自作した16進数から2進文字列の作成ルーチン http://www.ken3.org/cgi-bin/test/test094-1.asp で、 16進数に無い、G2,H1とか指定すると、実行時エラーでプログラムが止まります。 キレイナ16進数を送って来いと強気に出られない時もあるので、 修正方法・対応を考えてみました。

/* * 2.問題のエラー */

http://www.ken3.org/cgi-bin/test/test094-1.asp?DATA=F2 では、 F2を変換するとき、1文字目のFを a = CInt("&H" & "F") と&Hを付け、 文字列から数値変換の標準関数Cintを使い変換してます。 ここで、Gなど、16進数表記外の文字を渡すと、 Microsoft VBScript 実行時エラー エラー '800a000d' 型が一致しません。: 'CInt' /cgi-bin/test/test094-1.asp, 行 62 と実行時エラーが発生してました。 ひとつの回避案は、 0〜9,a〜f,A〜Fの文字かチェックする方法です、 事前にチェックを入れ、キレイなデータを通せばいい、そんな考えです。 それだと、一般的過ぎるので(オイオイ) 今回は、その考えから離れて、エラーを無視するそんな手抜きをやってみます。

/* * 3. On Error Resume Next でエラー発生時次の行へ(実行時エラーを無視) */

On Error Resume Next と、エラー発生時次の行へ、そんな命令があります。 こいつを使用して、 On Error Resume Next 'エラー発生時次の行へ nCHK = 0 '0で初期化 nCHK = CInt("&h" & Mid(strHEX, n, 1)) 'n文字目を数値変換 On Error Goto 0 'エラー処理を通常に戻す としてみました。 まず、 On Error Resume Nextでエラー時次の行に進むことにします。 nCHK = 0 変数を0で初期化します。 nCHK = CInt("&h" & Mid(strHEX, n, 1)) CIntで変換します。 ここで、もしGやHなどでエラーが発生した場合、 On Error Resume Nextが指定してあるので、次の行に処理が移ります。 結果的に何もしないで処理が進みます。nCHKに0を入れてあるので0で進みます。 エラーが発生したら0だ、そんな処理にしてしまいました。 http://www.ken3.org/cgi-bin/test/test095-1.asp?DATA=G1 で、テストできるので、 下記のエラーが発生する http://www.ken3.org/cgi-bin/test/test094-1.asp との違いを見てください。 ↓On Error Resume Next を使ったソース <% 'HEX16進文字列を受け取り2進数文字列を返す
Function HEX16toSTR2(strHEX)

    Dim n       'ループカウンタ
    Dim i       'ループのカウンタ
    Dim n8421   '8 4 2 1の数値計算用
    Dim str2STR 

    Dim nCHK

    str2STR = ""  '結果のエリアを初期化する

    '文字数分ループする
    For n = 1 To Len(strHEX)
        On Error Resume Next   'エラー発生時次の行へ
        nCHK = 0 '0で初期化
        nCHK = CInt("&h" & Mid(strHEX, n, 1)) 'n文字目を数値変換
        On Error Goto 0        'エラー処理を通常に戻す

        n8421 = 8  '初期値に8を代入する(上からチェックしたいので)
        For i = 1 To 4  '4回まわるよ
            If (nCHK And n8421) = 0 Then 'Andでビットをチェックする
                str2STR = str2STR & "0"  'ビットは立ってないよ
            Else
                str2STR = str2STR & "1"  'ビットは立ってるよ
            End If
            '次のビットをチェックしたいので2で割る
            n8421 = n8421 / 2
        Next 
    Next

    'リターン値をセットして終了
    HEX16toSTR2 = str2STR

End Function
%>

/* * 4.終わりの挨拶 </HTML> */

今回は、 実行時エラーを無視して、進んでみました。 キレイなデータが来ない場合もあるので、要注意ですね・・・・ 人生にも On Error Resume Next があれば・・・と思いつつ。。。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: