HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0323
にゅあ文字列の置換でエラーが発生する6未解決


にゅあ

リンク

2015/3/23(Mon) 22:50:34|NO.68067

このサイトの一番上のソースコードなのですが
http://prograpark.ninja-web.net/HSP/lab/StrReplace.html

下が持ってきたやつです。


#module #defcfunc replace str p1, str target, str after dim len, 2 len = strlen(p1), strlen(target) sdim string, len + 1 string = p1 i = 0 repeat n = instr(string, i, target) if ( n < 0 ) { break } i += n string = strmid(string, 0, i) + after + strmid(string, i + len(1), len(0) - i) i += len(1) await 1 loop return string #global

上記のモジュールを繰り返し実行していると

「サブルーチンやループのネストが深すぎます。」と
repeatの部分でエラーが発生します

breakやreturnも使用されていますし原因がよくわかりません

どのように改善すればいいでしょうか
宜しくお願いします



この記事に返信する


cats

リンク

2015/3/23(Mon) 23:10:45|NO.68068

>繰り返し実行していると
繰り返しとはどういうことですか?
無限ループ内でreplace関数を使い続けましたが何も問題ありませんでした。
ループのネストのエラーに関しては、デバッガのlooplevを見ながらプログラムを進めるとエラーの原因が特定しやすいです。
ちなみに、ご存知かとは思いますがhsp3.4かそこらからstrrep命令が追加されました。



にゅあ

リンク

2015/3/23(Mon) 23:22:24|NO.68069

catsさん
回答ありがとうございます。

繰り返し、replace関数を使うという事です。
この関数だけを無限ループ内で実行したら確かにエラーは発生しませんでした。

600行ほどのソースと混ぜて使ってるのですが
そのソースと混ぜてる時だけエラーが発生するようで、良く分かりませんでした。

strrep命令があるとは知りませんでした。
デバッガも見たのですがエラーの原因の特定が難しそうなのでstrep命令を使ってみます。

回答ありがとうございます。



KA

リンク

2015/3/24(Tue) 06:48:29|NO.68081

>>そのソースと混ぜてる時だけエラーが発生する・・・
>>エラーの原因の特定が難しそうなのでstrep命令を・・・

一番ダメな考えです、問題点を修正した上で別の方法を使いましょう。



にゅあ

リンク

2015/3/24(Tue) 15:06:34|NO.68089

>>KAさん
確かにそうですね。
回答ありがとうございます。

実際の所、strepを使った所で
他のrepeat~loop処理(単独処理ではエラーは発生しない)で、同様のエラーが発生しました。
試行錯誤してみます。



kanamaru

リンク

2015/3/25(Wed) 15:10:23|NO.68120

試しにawait 1のところをwait 1に変えてみてください。
詳しくはわからないのですが、
await 1などawaitのパラメータに小さい数を指定すると、
await 0と同じ動作になるそうです。…1
await 0を入れても入れないのと同じなので
ネストが深いということになったのかもしれません。
1のことは環境に依存するらしいので
無限ループ内だと大丈夫なのかもしれません。



kanahiron

リンク

2015/3/25(Wed) 15:33:01|NO.68121

await 0が入れないのと同じだなんてどこで仕入れてきた情報でしょうか…
HSPではOSから送られてきたメッセージをwait/await/stopの最中で処理します
なのでawait 0を挟んで無限ループを回しても適切にメッセージの処理が行われるので問題はありません
wait系を挟まないと応答なしになり、プログラムが操作不能になります

ネストが深すぎると怒られるのは、button gosub〜なのにstopで止まっていたり、
止めるつもりの場所で止まっていなくて別のreturnで戻っておかしくなっているとかはないでしょうか



ONION software Copyright 1997-2021(c) All rights reserved.