パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
関数を使う(文字列操作part2)
=================================================================================
文字列操作系関数のPrat2です。今回とりあげた関数のうち、asc,
instr については
キーボード入力でも異なる観点からの説明がありますので、ご参照下さい。
=================================================================================
関数 | 機能 | 書式 [ ]内は省略可 |
asc | 文字のキャラクタコードを得ます | asc(文字列) |
chr$ | 指定した数値のキャラクタコードを持つ文字を得ます | chr$(数式) |
instr | 文字列1の中から文字列2を探して、その文字の位置 を得ます。見つからない時は0を返します。 位置は、文字列1の中で探し始める位置を指定します |
instr([位置 , ] 文字列1, 文字列2) |
space$ | 数値で指定した空白文字列を得ます | space$(数値) |
string$ | 式に指定された数だけ、文字を連結した文字列を得ます 文字の代わりに数式を指定すると、数式で指定された 数値のキャラクタコードに該当する文字が連結されます |
string$(式 , 文字または数式) |
spc | 数式に指定された数の空白を出力します。 space$と似ていますが、spcはprint文の中でのみ使い ます。 |
spc(数式) |
tab | 数式で指定された位置まで空白を空けます。 spcと似ていますが、tabは行頭から指定された位置まで 空白をあけますので、若干機能が違います。 print文の中だけで使います。 |
tab(数式) |
1 asc, chr$
asc と chr$は非常に良く使う関数です。
まず、この関数の基本的な使い方のプログラムをあげておきます。
数値を入力すると、その数値(キャラクタコード)の文字を表示する −> chr$
文字を入力すると、そのキャラクタコードを表示する −>
asc
キャラクタコードは本章の最後に掲載しておきます。
10 input "キャラクタコード:",a$ 20 print chr$(val("&h"+a$)) 30 print "文字入力:"; 40 b$=inkey$ 50 if b$="" then goto 40 60 print b$ 70 print hex$(asc(b$)) |
実行画面です。
さて、chr$
の最大の使用方法はリアルタイムゲームでのキー入力判定です。特にキャラクタコード
&H1F未満の制御用コードを扱う時に、使用します。
以下のプログラムは、"+"を左右に動かすプログラムですが、矢印キー← (キャラクタコード&H1D)で左に
→(キャラクタコード&H1C)で右に動きます。
10 x=20:y=10 20 a$=inkey$: oldx=x 30 if a$=chr$(&H1C) then x=x+1 40 if a$=chr$(&H1D) then x=x-1 50 locate oldx,y:print" " 60 locate x,y:print "+" 70 goto 20 |
これと同じ動きをするプログラムをascで書くと以下のようになります。
10 x=20:y=10 20 a$=inkey$: oldx=x 30 if asc(a$)=&H1C then x=x+1 40 if asc(a$)=&H1D then x=x-1 50 locate oldx,y:print" " 60 locate x,y:print "+" 70 goto 20 |
また、chr$(13)+chr$(10) はMS-DOSおよびWindowsでは改行コードとなります。
従って
10 a$="こんちは": b$="みなさん": c$="お元気ですか"
20 print a$+chr$(13)+chr$(10)+b$+chr$(13)+chr$(10)+c$
は、以下のように表示されます。
こんちは みなさん お元気ですか |
【参考】
キャラクターコード
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | ||
0 | 0 | @ | P | p | ||||||||
1 | ! | 1 | A | Q | a | q | ||||||
2 | " | 2 | B | R | b | r | ||||||
3 | # | 3 | C | S | c | s | ||||||
4 | $ | 4 | D | T | d | t | ||||||
5 | % | 5 | E | U | e | u | ||||||
6 | & | 6 | F | V | f | v | ||||||
7 | ' | 7 | G | W | g | w | ||||||
8 | ( | 8 | H | X | h | x | ||||||
9 | ) | 9 | I | Y | i | y | ||||||
A | LF | * | : | J | Z | j | z | |||||
B | + | ; | K | [ | k | { | ||||||
C | , | < | L | \ | l | | | ||||||
D | CR | - | = | M | ] | m | } | |||||
E | . | > | N | ^ | n | ~ | ||||||
F | / | ? | O | _ | o |
2 instr
instr
は文字検索の関数なので、住所録とかテキストエディタ(なんてBasicで作るやついるかー?)
なんかで使ったりするものでしょうが、以下のようにキー判定による分岐に使うこともできます。
この使い方はなかなかGoodです。
一般的には、キー判定による分岐は以下のように、if
文を使います。
10 a$ = input$(1)
20 if a$ = "1" then gosub 1000
30 if a$ = "2" then gosub 2000
40 if a$ = "3" then gosub 3000
50 if a$ = "4" then gosub 4000
これがinstrを使うと以下のように書けてしまいます。うわ、スマートですね。いかがでしょうか。
10 a$ = input$(1)
20 on instr("1234", a$) gosub 1000, 2000, 3000, 4000
3 space$, string$, spc, tab
これらの関数は、モニターやプリンターへの表示、出力時に、表示のレイアウトを整えるのに使うことが
多い関数です。(おじさんはspc,tab
はあまり使いませんが)
space$, spc, tab
はいずれも空白を出力しますが、それぞれ似ていながら若干違いますので、機能の
違いを正確に把握して使いわけて下さい。
space$は、空白の文字列です。従って、a$+space$(5)+b$
のような使い方(a$と b$の文字列の間に空白
5字分をはさむ)ができます。
spc,tab はprint文の中でのみ使います。以下のプログラム例で違いを把握して下さい。
*なお、これらの関数は、Basicの種類によって若干記述方法や、機能が異なったりします。
N88互換Basic for Win ではspace$(0)
はエラーになります。Active BasicではO.K.です。
Active Basicにはtabはありません。
以下のプログラムでは、60行目までは、space$,
stribg$でひし形を描きます。
80、100行目はspc,tabの違いの例です。
1 cls 10 for i=0 to 5 20 print space$(6-i)+string$(i*2+1,"*") 30 next 40 for i=4 to 0 step -1 50 print space$(6-i)+string$(i*2+1,"*") 60 next 70 ' 80 print "*";spc(10);"*";spc(10);"*";spc(5);"*" 90 ' 100 print "*";tab(10);"*";tab(20);"*";tab(25);"*" |
実行画面