|
|
2014/2/21(Fri) 01:17:11|NO.60156
#module
#defcfunc getarrstr var strarr, str delim,int index
if ( index == 0 ) {
return strmid(strarr,0,instr(strarr,0,delim))
} else {
currenti = 0
beforei = 0
repeat index
beforei = currenti
if ( instr(strarr,currenti,delim) != (-1) ) {
currenti = instr(strarr,currenti,delim)+1+currenti
} else {
currenti = strlen(strarr)
break
}
loop
return strmid(strarr,currenti,currenti-beforei-1)
}
return ""
#global
buff1 = "ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX,YZ."
mes getarrstr(buff1,",",2) //正常
buff2 = "ABCDEFGHI JKLMN \"OPQRSTUVWXYZ\""
mes getarrstr(buff2," ",1) //間違い
ある文字列(strarr)をある文字(delim)で区切られた配列として考えてindex番目の要素を取り出す関数を作りました
ですがなぜかコード下部のbuff2の例では正常に動作しませんでした
いろいろと試してみたのですが全く原因がわかりません
buff2のようなものでもきっちりと動くようにするにはどうすればいいのでしょうか?
よろしければご教授いただければ幸いです
|
|
2014/2/21(Fri) 01:30:03|NO.60157
/*ご参考*/
#module
#defcfunc getarrstr var strarr, str delim,int index,local nn
split strarr,delim,nn ;mes stat
return nn(limit(index,0,stat-1))
#global
buff1 = "ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX,YZ."
mes getarrstr(buff1,",",2) //正常
buff2 = "ABCDEFGHI JKLMN \"OPQRSTUVWXYZ\""
mes getarrstr(buff2," ",1) //間違い
|
|
2014/2/21(Fri) 01:58:47|NO.60158
/*蛇足(?)*/
#module
#defcfunc getarrstr var strarr, str delim,int index
strarr+=delim ;①
if ( index == 0 ) {
return strmid(strarr,0,instr(strarr,0,delim))
} else {
currenti = 0
beforei = 0
repeat index+1 ;②
beforei = currenti
if ( instr(strarr,currenti,delim) != (-1) ) {
currenti = instr(strarr,currenti,delim)+1+currenti
} else {
currenti = strlen(strarr)
break
}
loop
; return strmid(strarr,currenti,currenti-beforei-1)
return strmid(strarr,beforei,currenti-beforei-1) ;③
}
return ""
#global
buff1 = "ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX,YZ." ;最期"."?
repeat 9+1
mes getarrstr(buff1,",",cnt) //正常
loop
buff2 = "ABCDEFGHI JKLMN \"OPQRSTUVWXYZ\""
repeat 3+1
mes getarrstr(buff2," ",cnt) //間違い
loop
mes "END"
|
|
2014/2/21(Fri) 06:49:21|NO.60162
fortunehillさんありがとうございました!
localってそんな風に使えるんですね、勉強になります
|
|