ループの反復の実行を中止して、次の反復の実行を開始する関数

解決


てけ!  2004-10-22 05:53:04  No: 86160

いつもお世話になっております。ループに関してご質問させてください。

ループの反復の実行を中止して、次の反復の実行を開始する関数ってないでしょうか?詳しく言えば、あるループ処理があります。そのループ内の処理途中で、次の反復の処理に移す為の関数です。どなたか、If文以外でのご教授お願いいたします。


ABC  2004-10-22 06:06:20  No: 86161

意味が今ひとつつかみきれないので
あなたの考えるIf文での例を書いてみてください。


てけ!  2004-10-22 06:27:07  No: 86162

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


ABC  2004-10-22 06:58:16  No: 86163

要するに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


ひろ  2004-10-22 18:14:34  No: 86164

うーん、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


java.lang.Nullpo  2004-10-22 18:15:15  No: 86165

見づらい場合は関数化するようにすれば良いと思うんだけど...。


java.lang.Nullpo  2004-10-22 19:00:16  No: 86166

内容が被った模様... orz


てけ!  2004-10-22 20:40:06  No: 86167

C言語のcontinueみたいな関数が無いのは少し残念ですが、、
大変参考になりましたっ!
Gotoを使用するか、関数をCallしてエラーを検知したら処理を終えるかを使いたいと思います。
ABCさん、ひろさん、java.lang.Nullpoさん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加