• ベストアンサー

ループの最大に変数の値を入れたい

基本的なことですみません。 10回繰り返し処理するにあたって i=1 Do While i <= 10 繰り返し処理 i=i+1 Loop とすると思います。 この10のところに変数の値を入れたいのですが 単純に i=1 a=10 Do While i <= a とするとエラーとなってしまいます。。。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3の方の言われる通りのようです。 a=1 b="10" としてテストしてみると、 無限ループになります。 Do While a <= "10" とかしてみると 数値として比較されるみたいで、 変数だと 変数の数値<変数の文字列 が常に真になるようです。 一種のバグのようなものなのかもしれません。 (文字列と数値を比較してはいけないということなんでしょうけど)

R0R0R0
質問者

お礼

目的がFor文でも可能であったため、下記の 方法で対応しました。 cnt=10 For i = 1 To cnt  処理 Next Forの場合は必ず数値と判断してくれるようですね。 いろいろとありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.3

cntの内容が文字扱いになってませんか? b=CInt(Request.Cookies("DATA")) もしくは b=Request.Cookies("DATA") b=Cint(b) と、数値型に変換してみてください。

R0R0R0
質問者

お礼

数値型のして方法が間違ってました。 上記方法で確認してみます。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>無限にループを繰り返している模様 これで、無限ループになるとすると 「処理」の部分でiの値が変更されているかcntの値が変更されている あるいは、「処理」自体の中に、無限ループに陥るような処理がある かなあと思います。 とりあえず、 (i,cntで)本当に無限ループしているか、 ループの最後の部分で cntやiの値をトレースしてみてはいかがでしょうか

R0R0R0
質問者

補足

私のぎこちない質問説明ながら 度々ご回答ありがとうございます。 トレースをしたところHTML上、何も表示されない状態でした(IE読み込み中、dllhost.exeによるCPU100%負荷発生)。 目的はこんな感じです。 <%@LANGUAGE=VBScript%> <% Response.Cookies("DATA") = 10 a=1 b=Request.Cookies("DATA") Do While a <= b   Response.Write a &" = "& Request.Cookies("DATA") &"<br>"   a = a+1 Loop %> 変数bに数値を入れれば意図通りの出力となりますが、 自分の環境ですとこの場合出力不可となります。 他の環境では上記内容で問題ないんですかね? クッキーの動作についてはその他処理で問題無く動作しているため、ブラウザ設定にも起因しないようです。。。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

普通は、エラーにはならないと思います。 どんなエラーメッセージになりますか?

R0R0R0
質問者

補足

すみません、詳細は制限変数にクッキーで取得した値を入れてます。エラーについてはブラウザ上何も表示が無く、無限にループを繰り返している模様です(CPUが100%になってしまう)。 cnt = Request.Cookies("CNT") Do While i <= cnt 処理 i = i+1 Loop ・Request.Cookies("CNT")の値はカウンターとして数値1以上が入ります。 ・Response.Write cnt とすると目的の値が表示されます。 考えられる点はcntが文字列(整数値)として取り込まれてないんだなーと思い、Dim cnt As Integerと前部に記述しましたが上手く行きません。 とほほ・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • perl:ループのカウンタ変数の値を保持したい。

    While文のループのなかにfor文でループをまわしているスクリプトなのですが、 forの中でカウンタ変数をつくり、ループ回数を計測しております。 またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。 $i=0; While(○○){ 処理1    for(××){ 処理2 $i++;      if($i >=100){  処理3       last; } } } ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。 このような場合、どうすれば$iの値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • 変数の配列の使い方教えてください。(初心者)

    VBで関数を作ってるのですが、 Function kansuu as Long Dim a(50) as Long Do (処理) Loop End Function ↑こんな形になってまして、変数a(0)~a(50)にはそれぞれ値が入ってます。{a(50)まで全部使うとは限りません。} Do文を抜ける条件として、途中に「もしa(0)~a(50)の値が全て"0"ならDo文を抜ける」という処理を入れたいのですが、変数aの"配列要素全て"という文の記述方法が分かりません。どなたか教えてください

  • Date型の変数に処理をして月を増やしたい

    いつもお世話になっております。 色々調べていて、Date型の変数に「+1」をすると、日が増えることがわかりました。 2005/07/06が入っている変数Aに A = A + 1 をすると 2005/07/07 になりますよね。 この2005/07/06が入っているAに何らかの処理をして 次の月である2005/08/06の値を入れたいです。 Do Whileでまわして1月ずつ増やしたいと思っています。 方法をご存知の型がいらっしゃいましたら、教えてください。 よろしくお願いいたします。

  • BShell 動的配列のループ処理について

    動的に変数名を作成した配列について、ループ処理を行う場合、どうしたらいいでしょうか 以下のような処理を書いたのですが、駄目でした。 a=0 while [ ${a} -ne 10 ] do     eval $(printf TEST%02d $a)=(aaa bbb ccc) #TEST00 - TEST10の配列が作られる。     # TEST00 - TEST10の配列の中身にたいして処理を行いたい。。。     for (( I=0; I < ${#`eval $(printf TEST%02d $a)[@]`}; ++I )) # エラー     do         // ここで処理したい・・・     done done いいアイディアがありましたらご教授よろしくお願いいたします。

  • ループの後判断どんな時使うの

    ====================== Do While 条件式   繰り返し処理 Loop ====================== の構文は良く使うのですが、 ====================== Do   繰り返し処理 Loop While 条件式 ====================== は今まで使ったことがありません。 どんな時に後判断を使うのですか? 具体的な事例がありましたら教えてください。

  • UserForm自体を変数でループ化したいのですが・・

    質問をさせてください。 USERFORMを使い、処理を行っているのですが USERFORM自体を変数とし、それを元にループで 処理をしたいと思っています。 こんな感じで変数を!!→UserForm(t) 例えば下記のような処理を・・ Private Sub UserForm_Activate() Do While t <= 10 And Cells(t, 1) <> "" Select Case t Case 1 To 3 'UserForm1処理 With UserForm1 UserForm1の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With Case 4 To 6 'UserForm2処理 With UserForm2 UserForm2の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With Case 7 To 10 'UserForm3処理 With UserForm3 UserForm3の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With End Select Loop end sub このような処理が一つのUserFormを開くと全てのUserForm間での処理がズラーッとあるわけですが処理内容は 変わりませんのでUserForm自体を変数で対応すれば書式もスッキリしてみやすく もし何かトラブルが生じてもすぐに対応できることから質問をさせていただきました。 よろしくお願いいたします。

  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • DataTableの値を変数に代入したい

    DataTableの値を変数に代入したい 以下のコードのにてDBから『職員ID』・『氏名』を取得しSyokuin(,)の2次元配列に代入したいのですが Do Loopのところで『オブジェクト参照がオブジェクトインスタンスに設定されていません』とエラーが出ます。 ほかのところでほぼ同様のコードでデータグリッドビューに表示はうまくいくんですが? Using OleCn As New OleDbConnection(省略) Using OleCmd As New OleDbCommand(省略) Using OleDAdp As New OleDb.OleDbDataAdapter() OleCmd.Connection = OleCn '配列取得 OleDAdp.SelectCommand = OleCmd OleDAdp.Fill(OleDSet, "職員") Dim i As Integer = 0 Dim jAs Integer = 0 Do Until j= OleDSet.Tables("職員").Columns.Count - 1   Do Until i = OleDSet.Tables("職員").Rows.Count - 1   Syokuin(j, i) = OleDSet.Tables("職員").Rows(i)(j)   i += 1   Loop j += 1 Loop End Using End Using End Using ご教授お願いします

  • 変数をループ内で変更しループ外でも参照したい

    変数をループ内で変更しループ外でも参照したい Linuxのシェルを作成している最中にちょっとした壁にぶつかりました。 元々は以下のような感じの処理でした。 (A)------------------ FLAG=false awk "(NR>=2){print}" ${FILE} | while read LINE_STR do if […]; then FLAG=true fi done -------------------- 状況によってFLAGの値を変更し、あとの処理で FLAGの値に応じて異なる処理を行ないます。 で、少し調べたところパイプすると別プロセスになるので云々と あったのでループの前の定義でも中でも「export FLAG」と 書いてみたのですがダメでした。そういうもんじゃないのかと。 元々は、最初の1行は読み飛ばしたいという要望を持っていたので このような記述だったのですが、少し不本意ですが、 読み込むファイルの1行目も処理対象に含めることにした上で 以下のような記述に変更したところ一応動きました。 (B)------------------ while read LINE_STR do FLAG=true done < ${FILE} -------------------- 対処療法として今はこのようなコードにしましたが完全ではありません。 今自分の知識の中で実現可能な方法だと以下のような感じです。 ・フラグファイルを使用する ・1行読み飛ばした一時ファイルを作成しそれを使う ・読み込むファイルの仕様を変更し1行目のヘッダを削除する ・(B)の方法で読み込み、ループ内でカウンタを持ち、最初だけ  continueする どれでも一応実現は可能ですが、エレガントではありません。 そこで質問することにしました。 以下のどちらかもしくはそれ以外で私の希望を実現する方法を 教えてください。よろしくお願いします ・パイプを使用したループでループ内で変更した変数の値を取得する方法  ※(シェルの制約で出来ないのであれば、その旨を知りたいです) ・パイプを使用せず、1行読み飛ばす方法 ※そもそも1行読み飛ばす方法で 「awk "(NR>=2){print}" ${FILE}」 と書いていますが、これは妥当でしょうか? よりよい記述があればあわせて教えてください。 よろしくお願いします。

  • JavaScriptの変数の値が消える!?

    原因不明のエラーで悩んでます。 どなたか救いの手を! 環境IE5.0SP2 JavaScriptで300個の変数を使用し、IEの入力画面の値を保持しています。 処理ボタンのタイミンングで、入力チェックで変数の値のチェックを行い、 OKの場合、テーブルに値を書き込む・・・という動作をします。 この、入力チェックの段階で変数に値が全くない場合は、エラーで中断しています。 テーブルに書き込む段階で、変数に値がない場合は、書き込みを行いません。 ◎今回のエラー。 ・入力チェックは通過したけれども、テーブルにはデータが書き込まれていませんでした。 処理はそのまま進んでいって、正常終了したけれどもデータがないという状態になりました。 インサートで失敗した場合、エラーメッセージと共に「デバッグしますか?」という例の画面 がでるはずですが、それも表示されなかったため、インサートの段階で変数から 値が消えてしまっていたのでは・・・と考えているのですが。 入力チェックの時点で入っていた値がすぐ後の、インサートの時点で消えてしまっている、 なんてことはありえるでしょうか? やはり、ただ単にコーディングミスなのかと調べまくっていますが、分かりません。 無線LANを使用しているため、途切れた・・・という可能性とかも あるのでしょうか? 分からないことばかりですみません。よろしくお願いいたします。