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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0409
ハイパーキーボード入力された文字を変換する14解決


ハイパーキーボード

リンク

2011/4/9(Sat) 19:39:14|NO.38272

mesbox等に入力された文字列を別の文字列に変換するようなソフトを作ろうと思います。
たとえば、「い」と入力してボタンを押したら「B」になったり
「あいうえお」と入力すれば「ABCDE」となるようにしたいのですが
このようなことは可能でしょうか?



この記事に返信する


Cookies

リンク

2011/4/9(Sat) 20:06:55|NO.38273

じゃあ、ボタンが押されたらmesbox内を解析して、
変数に"ABCDE"を入れた状態で、
objprmでも使ってmesboxの中身を変えちゃえばいいんじゃないですか?

一応サンプル作ってみました。
これで本当に質問者さんのしたいことができているのだろうか?意味を取り違えていないか心配です。
	screen 0,640,480
mb = "この中に適当に文字入れてね。\nんで、ボタンを押すと「あ」が「A」になるかもしれないよ。" objsize 640,30 mesbox mb, 640, 450 : mbid = stat button "変換開始!!!", *henkan stop *henkan split mb, "あ", results mb = "" repeat mb += results(cnt) if cnt == length(results)-1 : break mb += "A" loop objprm mbid, mb stop



ハイパーキーボード

リンク

2011/4/9(Sat) 20:17:31|NO.38274

このような感じですが
以下のように

「あ」→「A」
「い」→「B」
「う」→「C」
「え」→「D」
「お」→「E」

複数の文字を変換できるようにはできませんか?



Cookies

リンク

2011/4/9(Sat) 20:48:23|NO.38275

>複数の文字を変換できるようにはできませんか?
その質問に答えましょう。できます。






早く言えば、これを何度も繰り返せばよいのです。
あと残りは頑張ってください。

こんな質問をしたんですから、mesboxやbutton,objsize の意味はわかりますよね?
あとsplitとlengthとobjprmなんかとかのうち、あなたがわからない命令をHDLで調べて、
このスクリプトを理解しようとすればいくら僕のスクリプトとはいえ、今回のは難しくはありません。(と信じたい。)



f3d

リンク

2011/4/9(Sat) 23:04:42|NO.38276

規格では文字コードの連続は保証されていない可能性があるので、
こんなやり方はどうでしょう?

switch moji case "あ": moji = 'A' break case .... <以下省略> ....break default break swend



Cookies

リンク

2011/4/10(Sun) 09:15:59|NO.38280

>>f3dさん
 まあ、僕は文字の配列変数で対応表でも作って頑張ればいいかな〜なんて思ってたんですけど。

 >switch moji
 >case "あ":
> moji = 'A'
> break
 >case ....
 ><以下省略>
 >....break
 >
 >default
> break
 >swend
 mojiが"あ"だったとき、mojiに65を入れてからどうするのですか?
 僕質問者じゃないですけど、続きが知りたいです。



ハイパーキーボード

リンク

2011/4/10(Sun) 22:27:59|NO.38325

なかなか難しそうですががんばってみます
一応未解決にしておきます



ORZ

リンク

2011/4/11(Mon) 01:24:56|NO.38326

どこか解決してない要素があるのか?あるなら速やかに明確化しないと回答者が困る。
無いならとりあえず解決にしておかないとやっぱり回答者が困る。



SYAM

リンク

2011/4/11(Mon) 08:44:31|NO.38327

過去ログの25136あたりで書いたモジュールがきっと使えるんだぜ!



ハイパーキーボード

リンク

2011/4/11(Mon) 18:09:07|NO.38330

>SYAMさん

#module #define INTMAX 0x7ffffff // multireplace() : 入力文字列内の文字列を置換して返す. // s : 入力文字列. // srch : 検索文字列の配列. // rep : 置換文字列の配列. // nbword : 検索、置換文字列配列の要素数. #defcfunc multireplace str s, array srch, array rep, int nbword src = s dest = "" dim srchidx,nbword srch_end=0 // 検索し終えた区切り文字の数. repeat nbword srchrator=srch(cnt) : index=0 gosub *GET_NEXTINDEX : srchidx(cnt)=i loop *CUTTING_NEXT if(srch_end<nbword){ nextidx=INTMAX repeat nbword if(srchidx(cnt)<nextidx){ nextidx=srchidx(cnt) minidx=cnt } loop srchlen=strlen(srch(minidx)) dest += strmid(src, idx, nextidx-idx) + rep(minidx) idx=nextidx+srchlen repeat nbword if(srchidx(cnt)=nextidx){ srchrator=srch(cnt) : index=idx gosub *GET_NEXTINDEX : srchidx(cnt)=i } loop goto *CUTTING_NEXT } dest += strmid(src, idx, INTMAX); return dest *GET_NEXTINDEX i=instr(src, index, srchrator) if i<0 : i=INTMAX:srch_end++:return i=index+i:return #global
これですね。全く使い方が分かりませんががんばってみます。
ありがとうございました



SYAM

リンク

2011/4/11(Mon) 18:52:49|NO.38332

こうやって つかうのです。


sdim in,10240 mesbox in,640,,,10239 button "REPLACE",*START stop *START search = "犬","鼠","兎","鳥","象" replace= "猫","ねこ","ネコ","CAT","猫様" dest = multireplace(in, search, replace, 5) objprm 0,dest stop



ハイパーキーボード

リンク

2011/4/11(Mon) 21:56:11|NO.38334

これはとても素晴らしいスクリプトですね。
いつか中身を理解できるようになりたいです。
ありがとうございました



ハイパーキーボード

リンク

2011/4/12(Tue) 01:33:52|NO.38335

少し悩んだことがあったので書き込みます。
解決済みなので返信が来なければ新しく立てさせていただきます。

SYAMさんのスクリプトを応用しています。
文字置換の変数を一行に収めるのが困難なので複数行にしようと思います。


sdim search,100,10 sdim replace,100,10 search.0 = "あ","い","う","え","お" replace.0= "A","B","C","D","E" search.5 = "か","き","く","け","こ" replace.5= "F","G","H","I","J"

このようにしているのですが、これだと[か行]の変換がされません。
どのようにすれば複数行にできるのでしょうか?



SYAM

リンク

2011/4/12(Tue) 14:12:01|NO.38338

multireplace()関数 の使い方が最初のほうのコメントに書いてあります。

4つめの引数(サンプルで 5 にしてるやつ)は、検索キーワードの個数です。
5 のままにしてたら、あ〜お の5つしか検索しません。そうなっていませんか?



ハイパー

リンク

2011/4/12(Tue) 16:34:02|NO.38342

その通りでした
ありがとうございます



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