HyperCard tribute
半角・全角・数字をチェックする
コンピュータにおいて半角・全角・数字を区別しなければならない場所は数多くあります。例えば、計算をするためには、半角で書かれた数字でなければ計算できません。コンピュータは全角では「文字である」と認識してしまうからです。他にも、全角と半角の大きさの違いから予期した位置からずれてしまうなどという問題が起こることもあります。 これらの問題を防ぐため、入力されたデータをチェックして半角禁止の場合は半角の文字が入力できないように、全角禁止の場合は全角の文字が入力できないようにしてみます。 以下のスクリプトは、ask命令を用いて入力されたデータの全角チェックを行い、半角文字が入力されたならば、エラー音を出すスクリプトです。
2行目に exit ??? とありますが、?の部分にはこのスクリプトが書かれているハンドラを書いて下さい。 it には1行目で入力されたデータが入っています。3行目ではこの it の最後に「あ」を追加します。「あ」を追加する理由は4行目において、入力されたデータが1 wordであるかどうかを調べるためです。ここでは、「あ」を追加していますが、全角文字であれば何でも構いません。 wordというチャンクについては、理論編の「チャンクについて」を見て下さい。 具体例を用いて説明します。 it に「コーヒー」という文字が入っていたとします。この場合は、it は1 wordとなります。ここに「あ」を追加する訳ですが、追加後もwordによる区切りは現れないので、it は1 wordとなります。 次にit に「コーヒー1」という文字が入っていたとします。it は2 wordで、「あ」を追加することで 3 wordとなります。 最後に「123」という文字が入っていたとします。it は1 wordで、「あ」を追加することで 2 wordとなります。 これでわかるように、「あ」を追加する、すなわち it が「あ」と同じ全角だけで構成されているかどうかをチェックするわけです。「あ」を「1」などの半角文字に変えれば、半角文字のみ受け付けるスクリプトとなります。 7行目では、追加した「あ」を取り除きます。その後8行目で、フィールド「表示」に代入してデータとして利用します。8行目は自由に変えて使って下さい。 しかし、このチェック方法には一つ問題点があります。それは、全角のスペースをwordの区切りであるとしてしまう点です。つまり、「あ い う」などというデータを入力した場合、3 wordとなってしまうのです。 そこで、全角スペースの問題点を解決したスクリプトを以下に紹介します。
4行目から7行目で、全角スペースの数を数えています。全角スペースの数を数え、その数を変数numに代入します。 次に8行目でword数を調べるわけですが、全角スペースの数だけword数が増えるため、変数numの値をプラスした値でチェックをします。これにより、全角スペースによる区切りはチェックされないことになります。 これで全角のチェックができるようになりました。半角のチェックがしたい場合は、3行目において「あ」を追加する代わりに「a」などの半角文字を追加してください。そして6行目のスペースを、半角スペースに変えておいて下さい。 次に半角数字以外の文字をチェックするスクリプトです。
入力されたデータのキャラクタ数だけリピートを繰り返します。 入力されたデータの1文字目から順番に調べて、その中に数字以外のデータがあれば、ハンドラを抜けます。 こちらのスクリプトは先のスクリプトのように、全角・半角のチェックはできません。それは数字のチェックしかしていないからです。混同しないように注意して下さい。 |