こんにちは、三流プログラマーの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でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]