いつもお世話になっております。ループに関してご質問させてください。
ループの反復の実行を中止して、次の反復の実行を開始する関数ってないでしょうか?詳しく言えば、あるループ処理があります。そのループ内の処理途中で、次の反復の処理に移す為の関数です。どなたか、If文以外でのご教授お願いいたします。
意味が今ひとつつかみきれないので
あなたの考えるIf文での例を書いてみてください。
ABCさん以下のとおりです。
よろしくお願いいたします。
-----------
*If文の例
-----------
ファイルをオープンする。
While(1)
ファイルを1行ずつ読む
・
・
If 1行のバイト数>10バイト Then
不正な行である。
Else
行を解析する。
End If
End While
------------------
*期待している処理
------------------
While(1)
ファイルを1行ずつ読む
・
・
If 1行のバイト数>10バイト Then
不正な行である。
処理を中止し、次の行の処理へって関数をCALLする。
(例えば2行目が不正なら処理を中止して、次の3行目の処理へ移る)
End If
行を解析する。
End While
要するにIf〜Then〜Else〜End Ifで記述するとElseの中が長くなってしまい
見辛いからIfで条件判定して判定が偽であったら後の処理を飛ばしたい
ということでよろしいでしょうか?
であれば、あまりお勧めじゃないですがGotoステートメントでEnd Whileの
直前に飛ばしてやればいいんじゃないでしょうか。
While 1
・
・
If 1行のバイト数>10バイト Then Goto SkipJob
行を解析する。
SkipJob:
End While
それかIfの条件を反対にすればもっと分かりやすいものになると思います。
While 1
・
・
If 1行のバイト数<=10バイト Then
行を解析する。
End If
End While
うーん、CやJavaならcontinueという希望通りの機能があるんですがVBにはないんですよね、この機能が。
/* 参考までにCの場合のコード例 */
while (1) {
1行読む;
if (不正な行である) continue;
行解析の続き;
}
でも、仕様に無い物は使いようがないですから、ここはGoToを使うか、行解析部分を理を分離してSubプロシージャかFunctionにして Exit Sub(Exit Function)で処理を打ち切るようにしますね。
GoToを使う例はABCさんの書いたとおりなのでSubプロシージャを使う例を書いておきます。
while 1
1行読む。
Call analyzeline(行のデータ)
wend
として、analyzelen プロシージャで
private Sub analyzeline(行のデータを受け取る引数の宣言)
If (不正な行である) Then Exit Sub
行解析の続き
End Sub
見づらい場合は関数化するようにすれば良いと思うんだけど...。
内容が被った模様... orz
C言語のcontinueみたいな関数が無いのは少し残念ですが、、
大変参考になりましたっ!
Gotoを使用するか、関数をCallしてエラーを検知したら処理を終えるかを使いたいと思います。
ABCさん、ひろさん、java.lang.Nullpoさん、ありがとうございました。
ツイート | ![]() |