■ 新・ゲーム開発講座




■ へっぽこプログラミング入門♪


■第8夜:テキストファイルの構造

さて、ここでテキスト・インタプリタの話を始めたいところですが、順番から言いますとテキストファイルの構造について説明するほうが先になります。なにしろこれからプログラム的に解読しようという相手です。とはいえ、別段むずかしくはありませんのでさらっと行きましょう。

■文字コード

テキストファイルは、文字をコード表で置き換えたものです。試しに、バイナリエディタ(ファイルを16進数表記で直接編集するツール)でテキストファイルを覗いてみましょう。ここに

This is a pen.
It is not a pencil.

という内容のテキストファイルがあったとすると、そのバイナリは以下のようになります。

54 68 69 73 20 69 73 20 61 20 70 65 6E 2E 0D 0A 49 74 20 69 73 20 6E 6F 74 20 61 20 70 65 6E 63 69 6C 2E 0D

これだけだと何のことやらさっぱりですね(笑)。しかし暗号解読表があれば簡単に読むことができます。半角アルファベットは1文字8ビットのASCIIコードとして定められていて、それは以下の表の通りです。16進表記の 20H 以下は制御コードですが、とりあえず NULL=00H TAB=09H CR=0DH LF=0AH だけ覚えておけば充分でしょう。なおスペースは 20H です。



0

2

3

4

5

6

7

8

9

A

B

C

D

E

F
20

SP

!

"

#

$

%

&

'

(

)

*

+

,

-

,

/
30

0

1

2

3

4

5

6

7

8

9

:

;

<

=

>

?
40

@

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O
50

P

Q

R

S

T

U

V

W

X

Y

Z

[

\

]

^

_
60

`

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o
70

p

q

r

s

t

u

v

w

x

y

z

{

|

}

"

DEL

※例 '$'=24h '/'=2Fh 'M'=4Dh 'p'=70h


これをサンプルテキストファイルの1行目にあてはめてみましょう。この構造が分かれば、テキストの解釈はそう難しくないことがわかりますね。行の最後に、OD 0A というのがありますが、これは改行コード0DH(キャリッジリターン)OAH(ラインフィード)の組み合わせになっています。テキストをたどって1文字ずつ表示していくプログラムを組んだ場合、この制御文字をきちんと処理するか無視するかで画面上の文章表示に味付けをすることが出来ます。


T

h

i

s

[ ]

i

s

[ ]

a

[ ]

p

e

n

.

54

68

69

73

20

69

73

20

61

20

70

65

6E

2E

0D

0A


■シフトJISコード

では
日本語のような2バイト文字列はどうなっているでしょう。同じようにバイナリを見てみると以下のようになっています。


82

A0

81

60

96

7B

93

FA

82

CD

90

B0

93

56

82

C8

82

E8

0D

0A


「あ」にあたるのは 82 A0 というコードです。8ビット=256通りの識別子では日本語の漢字やひらがな、カタカナを表記しきれないのでこのように2バイトで1文字を現わします。

一般にWindows環境ではシフトJISコードと呼ばれるコード体系が使用されています。このコード体系は、1バイト文字(半角英数字)と2バイト文字の混合表記を簡便に行うために、2バイト文字の最初の1バイトは 80H 以上になっていて区別ができるようになっています。1バイト文字は半角カナを使わない限り 7FH 以下のコードになります。早い話、テキストから任意の1バイトを抜き出したとき、その一つ手前の1バイトを調べて 80H 以上だったら、その抜き出した文字は2バイト文字の2バイト目という簡易判定が出来る訳です。

・・・ちょっと説明がくどかった?かも知れませんが、この文字コードの特徴を使って、次項以降のインタプリタ作成を進めます。