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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0731
pinkychテキスト変換ツールを作りたい!4解決


pinkych

リンク

2009/7/31(Fri) 14:16:18|NO.26628

HSP3のサンプルスクリプトとして付属している editor.hsp をちょっと改造して
テキスト変換ツールを作りたいのですが条件と命令の作り方がわかりません
具体的には、テキスト内にある半角 g t c a 以外の文字(スペース改行含む)を消去したいのですが
どのように命令を書けばいいのでしょうか

if (buf="g")or(buf="a")or(buf="t")or(buf="c")

と書いたら文章がgかaかtかcの一文字だけのときを指定する条件になってしまいました…
あと、「テキスト内のgatc以外の文字を消去」という命令の書き方も教えてください

どなたか教えてください、よろしくおねがいします



この記事に返信する


SYAM

リンク

2009/7/31(Fri) 14:48:18|NO.26629

一文字ずつ確認しましょう。
確認するループの回数は文字列の長さに等しいですね。

ただし、全角文字は全角文字として扱う必要があります。
目的の文字の文字コードが、たまたま全角文字の文字コードの一部と一致してしまうことがあるかもしれません。そうなると、ありもしない文字を出力してしまいます。
全角文字はコードの先頭部分の1バイトを見ればわかるので、もし全角文字の先頭を見つけたらそれに続くもう1バイトも全角文字コードの一部であると判断して読み飛ばしています。



buf ="abcdef\ng h i j k l\nmnopqrstu\nv w x y z\nあかさたabcd" sdim buf2,strlen(buf) mes buf mes "------" repeat strlen(buf) if (kanji){ kanji=0 continue // buf2に追加しない. } ch=strmid(buf,cnt,1) //1字取り出す c=peek(ch,0) if ( ((c>=0x81)&&(c<=0x9f)) || ((c>=0xe0)&&(c<=0xfc)) ) { // 全角の第1バイト kanji = 1 continue // buf2に追加しない. } if (ch="g")or(ch="a")or(ch="t")or(ch="c") { buf2 += ch continue } ; buf2 += ch loop mes buf2



SYAM

リンク

2009/7/31(Fri) 15:00:39|NO.26630

ついでに、全角のチェックを怠った、*色んな意味で*悪い例です.
ありもしない文字を出力していますね.


buf ="病 H 幼 液" sdim buf2,strlen(buf) repeat strlen(buf) ch=strmid(buf,cnt,1) //1字取り出す if (ch="g")or(ch="a")or(ch="t")or(ch="c") { buf2 += ch continue } loop mes buf mes "------" mes buf2



珠後

リンク

2009/7/31(Fri) 23:09:12|NO.26654

この流れ的には邪道かもしれませんが sample\comobj\comtest9.hsp みたいに RegExpで消す方法もありますね



pinkych

リンク

2009/8/1(Sat) 20:37:23|NO.26669

>SYAMさん
ありがとうございます、できました!
これで遺伝子の比較がサクサク進みます…(涙)
最初は単純な作業だから簡単に書けると思ったのですが…難しいですね
助けていただき本当にありがとうございました

>珠後さん
文字を置き換えるやり方ですか…
命令リファレンス見ながら何をやっているのか解読がんばります…



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