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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1120
まるdefcfunc内のinstrでエラーが出ます6解決


まる

リンク

2009/11/20(Fri) 05:52:52|NO.28905

HSP初心者でただいま勉強中のまると申します。
「あああ,いいい,ううう,えええ」のように「,」で区切られた文字列の任意の部分を取り出す
プログラムを作成したのですが、defcfuncで関数にして呼び出すと、実行時にhit=instr(a,k,",")
の行数を指定され「変数名が指定されていません」とエラーが出てうまく動きません。
どなたか原因を教えてください。

-----------------------------------------------------------------------------
#module
#defcfunc strcut str a,int i
sdim kekka,64
k=0
hit=0
repeat
if cnt=i:break
hit=instr(a,k,",")
k=k+hit+1
wait 10
loop
getstr kekka,a,k,','
return kekka
#global

#include"hspext.as"
#include "hspda.as"
*cut
cls
a="あああ,いいい,ううう,えええ"
i=2
mes "["+a+"]から2列目を取り出します"
kekka=strcut(a,i)
mes kekka
stop
--------------------------------------------------------------------------
ちなみに、defcfuncを使わずに、以下のように*cutラベルの中だけで同じ動作をさせると
ちゃんと動いてくれます。

*cut
cls
a="あああ,いいい,ううう,えええ"
i=2
k=0
hit=0
mes "["+a+"]から2列目を取り出します"
repeat
if cnt=i:break
hit=instr(a,k,",")
k=k+hit+1
wait 10
loop
getstr kekka,a,k,','
mes kekka
stop



この記事に返信する


 

リンク

2009/11/20(Fri) 06:48:20|NO.28906


#module #defcfunc strcut str a,int i sdim kekka,64 a2=a:k=0:hit=0 repeat if cnt=i:break hit=instr(a2,k,",") k=k+hit+1 wait 10 loop getstr kekka,a2,k,',' return kekka #global *cut cls a="あああ,いいい,ううう,えええ" i=2 mes "["+a+"]から2列目を取り出します" kekka=strcut(a,i) mes kekka stop



珠後

リンク

2009/11/20(Fri) 06:49:47|NO.28907

引数aの内容を別の変数に格納すると動きます。
何故なんでしょう



shinkun

リンク

2009/11/20(Fri) 08:56:44|NO.28909

エラーの発生する原因は、instr の第1パラメータが「変数」しか受け付けないのに、strcut では a を str (文字列定数) としているためだと思います。
解決方法は他の皆さんが提示されているように変数を介してやるか、あるいはまるさんのスクリプトの

#defcfunc strcut str a, …


#defcfunc strcut var a, …
に変更するだけでも動くと思います。



まる

リンク

2009/11/20(Fri) 14:41:02|NO.28912

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

おっしゃる通り、いったんaを別な変数に入れてみたらすんなり動きました。
int型で受け取ったiはそのまま使えるのに、str型の引数はダメなのですね・・・
勉強になりました。ありがとうございますm(__)m



ANTARES

リンク

2009/11/21(Sat) 12:19:14|NO.28921

>int型で受け取ったiはそのまま使えるのに、str型の引数はダメなのですね・・・
 それは誤解です。

 原因は、int型やstr型の引数は定数扱いとなり、
変数としては使用できないというヘンな仕様のせいです。



珠後

リンク

2009/11/21(Sat) 12:28:35|NO.28922

恐らくBy valueで引数が渡される為に、変数とは違う操作体系にする為では?



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