|
|
2011/9/7(Wed) 22:45:32|NO.41206
初めまして。突然ですが、気になることがあったので質問させていただきます。
sdim bun,5
bun="プ","ロ","グ","ラ","ム"
prix=0
foreach bun
prix+=ginfo_mesx
pos prix,0
mes bun(cnt)
wait 50
loop
このようなスクリプトのとき、2行目のような感じで、一つの文章を一文字ずつ
配列として区切りたいわけです。
例:"プログラム"→"プ","ロ","グ","ラ","ム"
既出の場合は、リンク先をお願いします。
どなたでもいいので、回答よろしくお願いします。
|
|
2011/9/7(Wed) 22:49:32|NO.41208
質問者の意図が良く読み取れなかったんですけど
1つの変数から分けるってことなんだろうか...?
違う気がしますけどw
sdim bun,5
buf="プ,ロ,グ,ラ,ム"
split buf,",",bun
prix=0
foreach bun
prix+=ginfo_mesx
pos prix,0
mes bun(cnt)
wait 50
loop
すいませn。出来れば詳しく説明願います。
|
|
2011/9/7(Wed) 22:59:08|NO.41210
>k5342さん
ああ、なるほど。そういう書き方もできますね。
なんか自分勝手ですが、もう少し欲張ると、
"プログラム"という文字列が代入された変数を
(0)="プ"
(1)="ロ"
(2)="グ"
(3)="ラ"
(4)="ム"
の様な配列変数にしたいわけです。
無理でしたらすいません。
あと、最初の行のインデントが無いのは僕のミスです。
|
|
2011/9/7(Wed) 23:00:46|NO.41211
> k5342
塾より帰宅 とか夏休みがどーとか、何それ?
つっこんで欲しいのか?
この掲示板はブログや日記、twitter じゃねーっつの
|
|
2011/9/7(Wed) 23:05:58|NO.41214
>>No.41211
>>774さん
あ、すいません
以後気をつけます。
>>No.41210
strmidを駆使するというのはどうですか?
出来なくはないと思います。
|
|
2011/9/7(Wed) 23:17:09|NO.41217
こういう事でしょうか。
sdim bun,10
sdim moji,2,5
bun = "プログラム"
val = strlen(bun)
mes "もとの文字列="+bun+"("+val+"bytes)"
index = 0
repeat val
if index >= val : break
moji.cnt=strmid(bun,index,2)
mes "半角" + index + "文字目から全角1文字を取り出す="+moji.cnt
index += 2
wait 1
loop
stop
半角文字2つ分で全角1文字と数えることに注意してください。
HSPアシスタントを起動すると沢山のサンプルスクリプトを見る事が出来ますが、
お探しの件は「basic」フォルダの「strmid」の項でヒントを見つける事が出来ます。
上のスクリプトはサンプルを改変した物です。
|
|
2011/9/7(Wed) 23:33:29|NO.41219
>とおりすがり さん
そのスクリプトの通りです!
strmidという便利な命令があったんですね、知りませんでした。
ヘルプとかを参考にしながら頑張ってみたいと思います。
皆さんありがとうございました。
|
|
2011/9/8(Thu) 00:48:29|NO.41225
やっぱりこの手は無しですよね?w
#include "hsp3util.as"
text 500
emes "プログラム"
すみませんマジメにやります。
簡単な切り分けのサンプルを書いてみました。
例1と2の2パターン用意してみました。どちらか片方動かすときは片方はコメントにしておいてください。
sdim b,2,5
a = "プログラム"
repeat 5
;例1
b(cnt) = strmid(a, cnt*2, 2)
;例2
;wpoke b(cnt), 0, (wpeek(a, cnt*2))
loop
;表示してみる。
repeat 5
mes b(cnt)
loop
ただしこのサンプルでは2バイト文字の場合しか考慮していません。途中に半角文字が入ると文字化けを起こします。
対策は2バイト文字を判定して、配列変数に1バイト格納するか2バイト格納するか場合わけすることです。
判定はこちらの資料を参照下さい。
資料:2バイト文字の判定
http://hspdev-wiki.net/?String%2F%B2%FE%B9%D4#o681c775
|
|
2011/9/8(Thu) 19:07:46|NO.41242
>GENKI さん
あああ!なんだこんな簡単のがあったんだ!知りませんでした…
参考資料のリンクもありがとうございます。
|
|
2011/9/8(Thu) 19:28:49|NO.41244
ずっと前のこの掲示板のスレで、
2バイト・1バイト関係なしにできるように、
一度Unicodeにするというのがありましたねぇ。
あれを知ったときは感動でした。
ということで。
sjis="くぁwせdrftgyふじこlp;" //元の文字列
uni="" //Unicodeに変換した文字列
cnvstow uni, sjis //変換
i=0:repeat //$0000を探す。(文字数調べ)
if wpeek(uni,cnt*2)=$0000 : break
i++
loop
sdim result_uni, , i //文字数がiに入っているため、その分配列を確保。
repeat i
wpoke result_uni(cnt), 0, wpeek(uni, cnt*2) //それぞれの要素にコピー。
loop
sdim result, , i //sjisの分割結果格納変数
foreach result_uni
result(cnt)=cnvwtos(result_uni(cnt)) //それぞれの要素をSJISに変換。
loop
foreach result //結果を出力。
mes ""+cnt+":"+result(cnt)
loop
Unicodeの文字数を調べるのに$0000を探すという方法しか思いつかなかったのですが。
もっと効率的なやり方がある気がします。
スクリプトが相変わらずわかりにくくてすいません。
|
|
2011/9/8(Thu) 20:07:34|NO.41251
あるところからの情報で、Unicodeの文字数は
#uselib "msvcrt"
#cfunc strlenW "wcslen" var
としてからstrlenW関数で調べられるとのこと。
#uselib "msvcrt"
#cfunc strlenW "wcslen" var
sjis="くぁwせdrftgyふじこlp;" //元の文字列
uni="" //Unicodeに変換した文字列
cnvstow uni, sjis //変換
i=strlenW(uni)
sdim result_uni, , i //文字数がiに入っているため、その分配列を確保。
repeat i
wpoke result_uni(cnt), 0, wpeek(uni, cnt*2) //それぞれの要素にコピー。
loop
sdim result, , i //sjisの分割結果格納変数
foreach result_uni
result(cnt)=cnvwtos(result_uni(cnt)) //それぞれの要素をSJISに変換。
loop
foreach result //結果を出力。
mes ""+cnt+":"+result(cnt)
loop
で。
|
|
2011/9/8(Thu) 22:47:59|NO.41253
とても勉強になりました。
|
|
2011/9/8(Thu) 23:01:34|NO.41254
>>774さん
別に怒ることではないと思いますが。
>>Cookies(Kookies)さん
wcslenってmsvcrtだったの。しらなかった。
|
|
2011/12/15(Thu) 22:37:34|NO.43784
>つっこんで欲しいのか?
>この掲示板はブログや日記、twitter じゃねーっつの
この掲示板はそうやって突っ込むところ“でも”ありません。
第一twitterにもそんな一言だけ書き込むのってさみしいし;;
|
|
2011/12/16(Fri) 00:07:54|NO.43785
ンか月も前のスレッドに何をやっとるんだ?
|
|
2011/12/16(Fri) 01:52:20|NO.43790
数時間前にいくつかスパム投稿がありました。スパムは既に削除されています。(迅速な対応に感謝。)
しかし、これに伴い被害を受けたいくつかの古いスレッドが上にあがってきています。
皆様、レスするときはご注意下さい。
と、上がってきた古いスレに書き込んでみる。(`・ω・´)
|
|