パソコン活用研究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 @ P   p        
    ! 1 A Q a q        
    " 2 B R b r        
    # 3 C S c s        
    $ 4 D T d t        
    % 5 E U e u        
    & 6 F V f v        
    ' 7 G W g w        
    ( 8 H X h x        
    ) 9 I Y i y        
LF   * : J Z j z        
    + ; K [ k {        
    , < L \ l |        
CR   - = M ] m }        
    . > N ^ n ~        
    / ? 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);"*"

実行画面

 

TOP PAGE >Basic活用研究目次