はじめに
BASICプログラミングでは、プログラム内で使用する固定的なデータを扱う方法がいくつかあります。その中でも、DATA文とREAD文の組み合わせは、プログラムのソースコード内に直接データを埋め込み、それを順番に読み出すための古典的で便利な方法です。
例えば、ゲームのキャラクターパラメータ、設定値、短いメッセージリストなど、外部ファイルに保存するほどではないけれど、プログラム内でまとめて管理したいデータがある場合に役立ちます。 さらに、RESTORE文を使うことで、これらのデータを繰り返し読み出すことも可能になります。
このセクションでは、DATA、READ、RESTOREの基本的な使い方を学びましょう!
DATA文:データを定義する
DATA文は、READ文によって読み込まれる定数データ(数値や文字列)のリストをプログラム内に定義します。
構文:
DATA 定数1 [, 定数2, ...]DATAキーワードの後に、カンマ(,)区切りで読み込みたいデータを記述します。- データには、数値(例:
10,3.14)や文字列(例:"Hello","BASIC")を指定できます。 - 文字列データにカンマ(,)、コロン(:)、先頭や末尾のスペースが含まれる場合は、通常ダブルクォーテーション(“”)で囲みます (BASICの方言によっては常に必要)。
DATA文はプログラム内のどこにでも記述できますが、実行される文ではありません。プログラム実行時、DATA文の行は基本的にスキップされます。- 複数の
DATA文がある場合、それらはプログラムに登場する順序(通常は行番号順)に従って、一つの連続したデータリストとして扱われます。 DATA文には定数のみを記述でき、変数や式を記述することはできません(例:DATA A + Bは不可)。
DATA文は、プログラムの可読性を高めるために、関連するコードの近くや、プログラムの最後などにまとめて記述することが一般的です。 例:
10 DATA 10, 20, 30
20 DATA "Apple", "Banana", "Cherry"
30 DATA 1.5, "Mixed Data", 99 上記の例では、10, 20, 30, "Apple", "Banana", "Cherry", 1.5, "Mixed Data", 99 という順番のデータリストが作成されます。
READ文:データを読み込む
READ文は、DATA文で定義されたデータを順番に読み込み、指定された変数に代入します。
構文:
READ 変数1 [, 変数2, ...]READキーワードの後に、カンマ(,)区切りでデータを代入したい変数を記述します。- プログラムが
READ文を実行すると、DATAリスト内の「次に読み込むべきデータ」を変数に代入します。 - BASICシステムは内部的に「データポインタ」を持っており、どのデータまで読み込んだかを記憶しています。
READ文に複数の変数が指定されている場合、DATAリストから順番に値が読み込まれ、それぞれの変数に代入されます。READ文で指定した変数の型(数値型、文字列型など)と、DATA文のデータの型が一致している必要があります。一致しない場合、エラー(例:Type mismatch)が発生することがあります。- すべての
DATAを読み込んだ後に、さらにREAD文を実行しようとすると、エラー(例:Out of DATA)が発生します。
例:
10 DATA 100, "Taro", 25.5
20 DIM NAME$ AS STRING ' 文字列変数の宣言(方言による)
30 READ ID%, NAME$, SCORE ' ID%(整数), NAME$(文字列), SCORE(実数) に読み込む
40 PRINT "ID:"; ID%
50 PRINT "Name:"; NAME$
60 PRINT "Score:"; SCORE実行結果:
ID: 100
Name: Taro
Score: 25.5 この例では、DATA文の100がID%に、"Taro"がNAME$に、25.5がSCOREにそれぞれ代入されます。
RESTORE文:読み込み位置をリセットする
RESTORE文は、READ文が次にデータを読み込む位置(データポインタ)をリセットします。これにより、DATA文のデータを最初から、または指定した位置から再度読み込むことができます。
構文:
RESTORE [行番号 または ラベル]RESTOREのみを記述した場合、データポインタはプログラム中の最初のDATA文の先頭に戻ります。RESTOREの後に行番号やラベル(ラベルが使えるBASIC方言の場合)を指定すると、データポインタはその指定された行(またはラベルのある行)以降で最初に出現するDATA文の先頭に移動します。
例:
10 DATA 1, 2, 3
20 DATA 10, 20, 30
30 PRINT "First Read:"
40 FOR I = 1 TO 3
50 READ A
60 PRINT A;
70 NEXT I
80 PRINT
90 PRINT "Read After RESTORE:"
100 RESTORE ' データポインタを先頭(DATA 1, 2, 3)に戻す
110 FOR I = 1 TO 3
120 READ B
130 PRINT B;
140 NEXT I
150 PRINT
160 PRINT "Read After RESTORE 20:"
170 RESTORE 20 ' データポインタを行番号20(DATA 10, 20, 30)に移動
180 FOR I = 1 TO 3
190 READ C
200 PRINT C;
210 NEXT I
220 PRINT実行結果:
First Read:
1 2 3
Read After RESTORE:
1 2 3
Read After RESTORE 20:
10 20 30 この例では、最初にDATA文の1, 2, 3を読み込みます。
次にRESTOREでポインタをリセットし、再度1, 2, 3を読み込みます。
最後にRESTORE 20で行番号20のDATA文にポインタを移動させ、10, 20, 30を読み込んでいます。
応用例:配列へのデータ読み込み
DATA文とREAD文は、特に配列の初期化に便利です。
10 DIM SCORES(4) ' 0から4までの5要素の配列を宣言
20 DATA 85, 92, 78, 99, 65 ' 5つのスコアデータ
30 ' DATA文から配列にデータを読み込む
40 FOR I = 0 TO 4
50 READ SCORES(I)
60 NEXT I
70 ' 読み込んだデータを表示
80 PRINT "Scores:"
90 FOR I = 0 TO 4
100 PRINT "Student"; I; ":"; SCORES(I)
110 NEXT I実行結果:
Scores:
Student 0 : 85
Student 1 : 92
Student 2 : 78
Student 3 : 99
Student 4 : 65 このように、FOR...NEXTループと組み合わせることで、DATA文の値を効率的に配列に格納できます。
まとめ
- DATA: プログラム内に読み込み用の定数データ(数値、文字列)を定義します。
- READ:
DATA文で定義されたデータを順番に読み込み、変数に代入します。 - RESTORE:
READ文の読み込み開始位置を、DATAリストの先頭または指定した行/ラベルに戻します。 - これらを組み合わせることで、プログラム内にデータを埋め込み、効率的に利用できます。特に配列の初期化などに便利です。
READするデータの型と変数の型を一致させる必要があります。DATAをすべて読み込んだ後にREADするとエラーになります。
DATA、READ、RESTOREを使いこなして、プログラム内でデータをスマートに扱いましょう!