[BASICのはじめ方] Part13: DATAとREAD文、RESTOREの使い方

BASIC

はじめに

BASICプログラミングでは、プログラム内で使用する固定的なデータを扱う方法がいくつかあります。その中でも、DATA文とREAD文の組み合わせは、プログラムのソースコード内に直接データを埋め込み、それを順番に読み出すための古典的で便利な方法です。 📝

例えば、ゲームのキャラクターパラメータ、設定値、短いメッセージリストなど、外部ファイルに保存するほどではないけれど、プログラム内でまとめて管理したいデータがある場合に役立ちます。 さらに、RESTORE文を使うことで、これらのデータを繰り返し読み出すことも可能になります。

このセクションでは、DATAREADRESTOREの基本的な使い方を学びましょう!

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文の100ID%に、"Taro"NAME$に、25.5SCOREにそれぞれ代入されます。

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するとエラーになります。

DATAREADRESTOREを使いこなして、プログラム内でデータをスマートに扱いましょう! 🎉

コメント

タイトルとURLをコピーしました