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の値を保持できますでしょうか。
お詳しい方、宜しくお願い致します。
※ネストがうまく表現できず、みずらくてスミマセン。
No.1ベストアンサー
- 回答日時:
Perlのfor(式1 ; 式2; 式3 ) の 式1 ; 式2; 式3 いずれかを省略することができます。
また、
for(式1 ; 式2; 式3 ) { 処理 }
は
式1;
while(式2) {
処理
式3
}
と(ほぼ)同じです。
これらを考えて、変数が初期化されないようにすればいいのではないでしょうか。
> $iの値はforループを抜けるとリセットしてしまいます。
for文を抜けても、変数の値は保持されます。
リセットされるのは、リセットするようにプログラムに書いてあるからです。
for(××){
って省略してありますけど、ここで for($i=0;〜) ってやってませんか?
No.2
- 回答日時:
追記です。
forループは途中で抜けないとダメなんですか?
$i=0;
my $firstTime=1;
While(○○){
for(××){
if( $firstTime ) {
処理1 ;
$firstTime=0 ;
}
処理2
$i++;
if(条件を満す) {
処理3
$firstTime=0 ;
}
}
}
とか
$i=0;
While(○○){
処理1 ;
for(××){
処理2
$i++;
if(条件を満す) {
処理3
処理1 ;
}
}
}
とか、last を使わない方法があるのでは?
処理の内容次第では、もっとシンプルに書けるかもしれません。
ログの表示で、例えばログファイルのログを1000行読み込む毎に表示、最終的に1万行読み込む、といった処理をするためlastを使っています。
他の記述ができないか、考えてみます。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) For~Nextステートメントの終了条件について 1 2023/01/08 18:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デ-タテ-ブルの内容での更新...
-
実行中の変数の中身をイミディ...
-
perl:ループのカウンタ変数の値...
-
arduino の割り込み処理について
-
処理終了後、他のページへジャ...
-
VB6で、長い時間かかる処理...
-
UWSC SLCTBOXもしくはSELECTに...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
<SELECT>タグの折り返し
-
16進の10進変換について
-
実行時エラー 3020の対策
-
文字の横にプルダウンを表示さ...
-
セレクトメニューで2つの項目...
-
数値英単語変換
-
セレクトボックスのselected属...
-
複数列を持ったリストボックス...
-
selectタグ内の特定のoptionの...
-
【メモリ不足で落ちる(python)】
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
C言語のflagの使い方が分かりま...
-
VBAのCallステートメントについて
-
実行中の変数の中身をイミディ...
-
処理終了後、他のページへジャ...
-
初回起動のみ判別したい
-
回数を指定しないで空白行まで...
-
問題作成のWebアプリの作り方を...
-
UWSC SLCTBOXもしくはSELECTに...
-
フラグをたてる、、の意味を教...
-
perl:ループのカウンタ変数の値...
-
夕方くらいから急にGoogle検索...
-
バッファリング処理を高速化し...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
どちのほうがすきですか?
-
formで特定のinputを送信しない...
-
文字の横にプルダウンを表示さ...
-
16進の10進変換について
-
実行時エラー 3020の対策
おすすめ情報
失礼いたしました。
if文の条件式の”$i >=100”は無視して、”ある条件を満たしたとき”に置き換えていただけますでしょうか。
whileループ→forループ→if文→whileループ→forループ→if文→・・・
を繰り返す処理になります。
その度に、$iの値を保持し、次回はその値の続きからカウントしたいです。