パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)

関数を使う(文字列操作)

=================================================================================
BASICにはたくさんの関数が用意されています。しかし、BASICのプログラミングに少し慣れて
きても、案外文字列操作系関数は使い慣れない人が多いかと思います。特に文字列操作の関数は
ゲームなんか作っている場合にはあまり使う機会がないかもしれません。
しかし、使い方をマスターすると結構便利であったりします。と言うわけで、ちょっと文字列操作系
関数の使い方の例をあげてみたいと思います。実際のプログラミング時によく使う例をあげてみ
ましたので参考にして下さい。
=================================================================================

関数 機能 書式   [  ] で囲まれた項目は省略可能
STR$ 数値を文字列に変換 STR$(式)
LEN 文字列のバイト数を得る LEN(文字列)
VAL 文字列表記の数値を実際の数値に変換 VAL(文字列)
RIGHT$ 文字列の右側から、式で指定した長さの文字列を抜き出す RIGHT$(文字列, 式)
MID$ 文字列の式1番めの文字から、式2で指定の長さの文字列を抜き出す MID$(文字列, 式1, [式2])
LEFT$ 文字列の左側から、式で指定した長さの文字列を抜き出す LEFT$(文字列, 式)
OCT$ 10進数を8進数に変換し、その文字列を得ます OCT$(式)
HEX$ 10進数を16進数に変換し、その文字列を得ます HEX$(式)

                             *式は変数、数値、数式が記述可

1 LEFT$, STR$の使用例
以下のプログラムはSHUFFLE.BASからの抜粋です。(全プログラムは「配列その2」にあります)
q$にトランプのカードの表示用文字列を代入しているところです。

LEFT$
q$( )に代入された文字列の長さは8バイトのものと9バイトのもがあります。
これだと、表示する時、長さがまちまちできれいに表示がそろわないので、全部同じ長さ
にそろえました。94行をみて下さい。q$()の後に、スペース " "を加えて、左から9バイト分
抜き出しています。これで、もともと9バイトだった文字列はそのまま、8バイトだった
文字列は、最後にスペースが付加されて9バイト文字列となりました。

STR$
50行から80行まで、STR$(i)で1から13までの数値を文字列に変換して、付加しています。

30 q$(0)="Joker***"
40 for i=1 to 13
50 q$(i)="ハート"+str$(i)
60 q$(i+13)="ダイヤ"+str$(i)
70 q$(i+26)="クラブ"+str$(i)
80 q$(i+39)="スペド"+str$(i)
90 next
92 for i=0 to 52
94 q$(i)=left$(q$(i)+" ",9)
96 next

2 VAL, RIGHT$, HEX$

VAL, RIGHT$
以下のリストもSHUFFLE.BASからの抜粋です。RANDOMIZEは乱数の系列をかえる命令ですが、
下記のようにすると、プログラム実行時のタイミングで、自動的に適当な乱数系列を得ることができます。
time$は hh:mm:ss の形でコンピューター内のシステムクロックを返します。
right$(time$,2)で右端2文字を抜きとって(すなわちss、つまり秒の部分)います。これはまだ
文字列なので、VAL関数で数値に変換しています。これで、0から60の数値がランダムにえられます

110 randomize val(right$(time$,2))

HEX$
次の例(Memodump.bas Qbasic用からの抜粋  全リストは「Basicからマシン語へ1」にあり
ます)も文字列の長さを一定にするためのものです。segadd は0 から FFFF(16進数)までの
数値を取りうる変数です(8086のセグメントアドレスです)。HEX$で16進数表示の文字列に変換し、
頭に"0000"を付加し、後ろに": "をつけて、右から6文字抜き取ることで、文字列の長さを整えています。
例えば segadd = 3 の場合 00003: と表示されます。 segadd = BFFF なら 0BFFF: と表示
されます。

PRINT RIGHT$("0000" + HEX$(segadd) + ":", 6);

OCT$
OCT$は数値を8進数の文字列に変換します。使い方はHEX$と同等です。


3 LEN, MID$

次の例は、文字列を逆転するものです。
20行目で文字列の長さを取得します。
40〜60行目でお尻の文字から順に先頭に持ってきて、文字列を逆転させます。

10 input a$
20 length = len(a$)
30 b$=""
40 for i = 0 to length-1
50 b$ = b$ + mid$(a$, length-i, 1)
60 next
70 print b$

mid$にはもうひとつの使い方として、文字列の置換という機能があります。
以下の例では、a$の3文字目から、2文字分を"12" に置き換えます。これによりa$は"ab12efghi"
になります。

10 a$ = "abcdefghi"
20 mid$(a$, 3 ,2) = "12"

TOP PAGE >Basic活用研究目次