☆ ファイル操作 ☆

ファイル操作とは、プログラムやアルゴリズムの外部に、データを記録するためのものである。
通常は、アルゴリズムの実行を終了させると、例えば、キーボードから入力されたようなデータは消去される。しかし、ファイル操作によりアルゴリズムの外部にデータをファイルとして記録しておくと、次にアルゴリズムを実行させた時に、前回記録しておいたデータからファイルを読み込んで、再度利用することが可能になります。

プログラミング言語では通常、ファイルの種類(ファイルの編成)には順次編成、索引編成、相対編成などがあり、そしてファイルアクセスの方法には、順次アクセス、直接アクセスまたは乱アクセスなどがある。
JPADetでは、扱えるファイルはCSV形式(カンマ区切り形式)で保存された順次編成ファイルだけであり、物理的な記録の順番に従ったデータの入出力を行う順次アクセスだけである。

これを利用して、以下のようなアルゴリズムを作成してみます。

何人かの「氏名」と「生年(西暦)」と「生まれ月」というデータを入力する。
もし、氏名の入力で「9999」であったときにはデータ入力の受付を終了し、それらをいったんファイルに保存する。次に、保存されたデータをファイルから読み込んで、それらを画面に表示するというアルゴリズムを組む。

作成するシートは以下のようになります。

作成するシートは、一見すると難しいようですが少しずつ分割していけば大丈夫です。

まずはデータを氏名を入力させます。
この氏名のところに『9999』を入力すると、変数Qに9999を代入し、前判定繰返しを終えて次の作業に移るようになっているのがわかりますね。
そして、9999は人ではありませんので、そのときに始まってしまった処理を含めないため(9999をデータとして保存しないため)に、配列から1を引いて変数Jに入れておきます。

9999が入力されなかった場合には、『西暦』と『生まれた月』をそれぞれ別々の配列にいれて、最後に配列にをずらし(+1し)て処理を継続させています。

入力が終了するとこちらに移ってきます。
ファイルの入出力を行う場合は、必ず図のようにopen関数でファイルを開き、close関数で閉じる処理を行わなければいけません。

さらに、ファイル指定子を数値型変数として前もって宣言しておく必要があります。
図の場合だと、open関数とclose関数を処理するときに「出力」を指定しています。

また、図においてはopen関数は「writeopen(z)関数」を使用しています。これはファイルに記録するために使用しています。
さらにopen関数として「readopen(z)関数」を使用していますねこれはファイルを読み出すために使用しています。

実際のところはファイル名(もしくはファイル名が記述された文字列変数)を記述することになっていて、今回は「data.txt」を指定しています。
この場合、JPADetで作成しているシートが存在する同じディレクトリ(フォルダ)の中にある「data.txt」が対象になるのですが、「data.txt」が存在しなかった場合は新たに作成されます。

ここで少し補足させていただきます。
JPADetでは、文字や数値を入力していた場合縦には大きくなるのですが横には大きくなりません。
ですので、この二つの記述は切れてしまっているんです。

正確には、『出力=writeopen("data.txt")』、『入力=readopen("data.txt")』となっています。
(改行もしてありません)

ファイルへの書き込みは、出力シンボルを使用すればよいのですが、これまでの画面の表示とは異なり、上の図のように「ファイルへの出力」のラジオボタンを選び、ファイル指定子を指定する必要があります。
入力シンボルも同じです。

そして、ファイルへのデータ書き込みが終了したところには非零(NULL)記号が挿入されるため、次回ファイルの入力時には、この非零(NULL)記号がファイルの終端の目印になります。



指定したファイルの終端まで読み込むという処理をさせたい場合には、繰返し処理の条件としてeof関数を使用します。
eof(end of file)関数は、ファイルの終端に達した時に非零(NULL)を返すファイル組み込み関数です。



では、実行してみましょう。

名前に9999が入力されるまで、氏名、生年、生まれた月を聞いてきます。

名前に9999が入力されると、入力を終了させ今まで入力したものが出力されて実行を終了しています。

しかし、これで終わっているわけではありません。
入力されたデータはファイルに保存されているはずです。

今回のデータが保存されている場所(フォルダ)に、data.txtという今までなかったファイルが出来上がっています。

そのテキストデータを開いてみると、入力されたデータがカンマ区切り(CSV形式)で保存されていました。

data.txtがしっかりと作成されていたら、今回の問題は終了です。