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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1012
pumpkin文字数によって文字を加えた時、「ac」という文字が出る場合がある6未解決


pumpkin

リンク

2015/10/12(Mon) 15:27:32|NO.72242

message="01234567890123456789" //messageに20文字代入
mozisuu=strlen(message) //mozisuuにmessageの文字数を代入 if mozisuu>19 : mozi="…" //文字数が19以上の時、moziに「…」を代入 message=strmid(message,0,19)+mozi //messageを19文字まで+変数mozi mes message message="あいうえおあいうえお" //messageに20文字(20バイト)代入 mozisuu=strlen(message) //mozisuuにmessageの文字数を代入 if mozisuu>19 : mozi="…" //文字数が19以上の時、moziに「…」を代入 message=strmid(message,0,19)+mozi //messageを19文字まで+変数mozi mes message

※ひらがな1文字 = 半角数字2文字 = 文字数2文字
本当だったら、ひらがなの文字列は「あいうえおあいうえ…」と表示されるはずなのですが
どういうわけか「あいうえおあいうえac」と表示されてしまいます

文字化け?ですかね? 不具合なのか、何か悪いところがあるのか…
改善方法とかあったら教えてください。



この記事に返信する


沢渡

リンク

2015/10/12(Mon) 16:21:27|NO.72243

19を18に変えてみてください。strmid(message,0,19)だと「お」の前半1バイトでぶった切られてしまいます。
あと、「mozisuu>19」は「19以上」という意味ではなく、「19よりも大きい」という意味ですよ。



スペース

リンク

2015/10/12(Mon) 16:49:46|NO.72244

もし「同じか、それ以上」にしたい場合は「mozisuu>=19」です。



pumpkin

リンク

2015/10/12(Mon) 17:41:08|NO.72245

19以上はただのコメントのミスですね すみません

ひらがなだけの文字列なら18で出来るんですが、これを応用して使うとなると
messageがひらがななのか半角数字なのか、ひらがなと半角数字の組み合わせなのか分からない場合もあるので
messageがどの場合でも対応できるような方法が欲しいです…



tds12

リンク

2015/10/12(Mon) 18:14:12|NO.72247

うまく言葉で説明できないので、
スクリプトを残します。
どなたか説明お願いいたします。
自由に使ってください。

#uselib "kernel32.dll" #cfunc IsDBCSLeadByte "IsDBCSLeadByte" int txt = "あa" num = 0 repeat strlen(txt) num++ if IsDBCSLeadByte(peek(txt,cnt)){ //2バイトのとき continue cnt + 2 }else{ //1バイトのとき continue cnt + 1 } loop mes num



沢渡

リンク

2015/10/12(Mon) 18:40:13|NO.72249

以下のサイトによると、「全角文字は、1バイト目のコードが0x80〜0x9F、もしくは0xE0〜0xFF」
とのことだったので、それを踏まえて、取り出すバイト数を数えるようにしてみました。
http://www.seiai.ed.jp/sys/text/java/shiftjis_table.html


leng=8 //取り出したい文字数 text="ABC壱弐DE参肆FGH伍" a=0 //何バイト取り出すか d=0 //1の場合は「…」を付けない repeat leng c=peek(text,a) if ((c>=0x80)&(c<=0x9F))|((c>=0xE0)&(c<=0xFF)) { a=a+2 //全角文字の場合は+2バイト } else { a++ //それ以外の場合は+1バイト } if a>=strlen(text) : d=1 : break //途中でバイト数がテキストのバイト数以上になったら脱出 //その際、表示する文字列に「…」は付け加えない loop text2=strmid(text,0,a) if d=0 : text2=text2+"…" mes text2



スペース

リンク

2015/10/12(Mon) 18:44:38|NO.72250

全角・半角を判定するなら、こんなスレが前にあった。
http://hsp.tv/play/pforum.php?mode=pastwch&num=3414



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