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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0208
prince最初から○文字目->○行目の○文字目6解決


prince

リンク

2015/2/8(Sun) 11:50:02|NO.67325

変数aに次のような文字列が入っていたとします。

abb bfg cd efgh i j

7文字目はcですが、これを3行目の1文字目という値に変換するにはどうしたらいいでしょうか?


a={"abb bfg cd efgh i j"} //ここにどのような処理を追加すればいいか? mes "7文字目は"+strmid(a,6,1)+"です。" mes "その文字は"+b+"行目の"+c+"文字目です。"



この記事に返信する


kanahiron

リンク

2015/2/8(Sun) 13:44:55|NO.67328

これはマルチバイト文字は考慮しなくて大丈夫でしょうか?
このスクリプトはしてません 半角英数字記号のみです

質問者さんが貼ったスクリプトだとstrmid(a,6,1)はfになります
改行が2Byteあるためです
7文字目はcと帰ってきたほうが意図と合いそうですので改行を無視して考えます

a ={"abb bfg cd efgh i j"} temp = "" n = 7 a_ = a len = 0 b = 0 //改行を無くす strrep a_,"\n","" //n+1文字目を取得 s = strmid(a_,n-1,1) notesel a repeat noteinfo(0) //0から始まる行数を1からにする b++ //cnt行目を取得 noteget temp,cnt //n+1文字目がその行に入っているかを検索 index = instr(temp,0,s) //入っていたら if index != -1{ //indexは0から始まるので+1して終わり c = index+1 break } loop mes ""+n+"文字目は"+s+"です。" mes "その文字は"+b+"行目の"+c+"文字目です。"



prince

リンク

2015/2/8(Sun) 22:19:51|NO.67339

失礼しました…
○バイト目->○行目の○バイト目です。



kanahiron

リンク

2015/2/8(Sun) 23:02:35|NO.67342


a ={"abb bfg cd efgh i j"} temp = "" n = 6 len = 0 b = 0 c = 0 count = n s = strmid(a,n,1) notesel a repeat noteinfo(0) b++ noteget temp,cnt len = strlen(temp) if (count - len) < 0{ c = count break } else { count -= (len+2) } loop if c < 0:dialog "その位置に文字は存在しません" mes a mes ""+n+"Byte目は"+s+"です。" mes "その文字は"+b+"行目の"+c+"Byte目です。"
動作は間違っていませんが認識と合っているか不安ですね



skyblue

リンク

2015/2/9(Mon) 07:08:15|NO.67345

note系命令を使って行数を取得した後に目的文字の位置を取得する。



prince

リンク

2015/2/9(Mon) 17:34:02|NO.67348

なぜか自分のスクリプトとあわせるとうまく動作しない…

別の方法を思いついたので解決とします。回答してくださいありがとうございました。



prince

リンク

2015/2/9(Mon) 17:43:01|NO.67350

解決



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