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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0123
kan初めての関数作成で詰まってます…4解決


kan

リンク

2012/1/23(Mon) 01:42:32|NO.44502

hsp歴数週間の初心者なんでが
文字列から2つ文字をとってその間の文字列を出す関数をつくろうと思い
以下のように作って見ました

#defcfunc mozi val p1,int p2,str p3,str p4 ;p1が抜く文字列p2が始める場所p3が1つ目の文字列p4が後ろの文字列 a = instr(p1,p2,p3) b = instr(p1,p2,p4) c = a - b return strmid(p1,a,c)
作りたいのは
あいうえお という文字列があり
あ をp3に お をp4に入れたら
結果がいうえ になるものを作りたいと思っています
何かいい方法を知っている方がいらしましたらご教授願います



この記事に返信する


MillkeyWeler

リンク

2012/1/23(Mon) 06:04:24|NO.44503

ほぼなにも改良していませんが、参考程度に。


#module #defcfunc mozi var p1,int p2,var p3,var p4 ;p1が抜く文字列p2が始める場所p3が1つ目の文字列p4が後ろの文字列 a = instr(p1,p2,p3)+2 ;ここの計算時の最後の +2 は、検索用文字列の文字のバイト数 b = instr(p1,p2,p4) c = b - a ;ここ計算が逆ね。質問者の場合、a から b を引いてたので、常に0かマイナスになってしまう。 return strmid(p1,a,c) #global def = "あいうえお" search_a = "あ" search_b = "お" aft = mozi(def,0,search_a,search_b) ;ここの関数 2 番目に、0以外の数値を指定するなら、関数の方の計算式を変えること。 mes ""+aft

まぁ、いろいろと改良が必要だけど、自分で考えていいものが作れるといいね^^



kan

リンク

2012/1/23(Mon) 18:44:16|NO.44505

回答ありがとうございますm(__)m

関数の方の式にある+2について簡単に教えていただけませんか?



MillkeyWeler

リンク

2012/1/23(Mon) 20:05:41|NO.44506

+2 とは、関数内 a の変数に、instr のインデックスが入力されますよね?
その場合、+2 は、「あ」の文字のバイト数で、a のインデックス +2 バイトからってことです。

+2 を付けないと、インデックスが 0 から始まってしまうので、結果が、「あいうえ」になってしまいます。
質問者様の提示したソースだと、「あいうえお」の「あ」は含みませんので、「あ」のバイト分をスキップさせるのです。

多少、面倒でも、関数の引数に、検索する文字列のバイト数などを指定するか、関数内部で文字列バイト数を調べて計算した方がいいですよー。

[改良版参考関数](関数内部の説明は、省きます。)

#module #defcfunc mozi var p1,int p2,var p3,var p4 a_size = strlen(p3) a = instr(p1,p2,p3) + a_size b = instr(p1,p2,p4) c = b - a return strmid(p1,a,c) #global



kan

リンク

2012/1/28(Sat) 02:18:28|NO.44570

詳しい説明ありがとうございましたm(__)m



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