研究開発

「はじめてのVectorScript」と題して連載を始めるわけですが、本連載は「Vectorworksは持っているけどVectorScriptって何?」、「プログラミングって難しいんでしょ?」「アイデアはあるんだけど...」という人が「それ、VectorScriptでやれば簡単だよね」と言えるくらいになるのが目標です。

VectorworksはMacintosh版とWindows版とのマルチプラットホーム環境でありながらも、VectorScriptはOSを意識することのなくプログラミングが可能で、どちらでプログラミングしてもソースコードの変更なしでMacintosh、Windowsどちらでも実行が可能です。そしてVectorworksを持っていればいますぐにでも始められます。

ゲーム機の場合、DQ7(ソフト)で遊びたいという理由で3DS(ハード)を選ぶと思います。「このソフト(あなたが書いたスクリプト)を使いたいためにVectorworksを選びました」と言わせるようなプログラムを目指してがんばりましょう。自分のアイデアをプログラム化しブログで公開なんてことも夢ではありません。

第8章 ファイルの入出力


VectorScriptにも、他のアプリケーションから出力されたテキストデータを読み込んだり
書き込んだりできる手続き、関数群を備えています。

・ファイルの読み込み
 ファイルからデータを読み込むには以下の手順で行います。

 1.ファイルを開く

 ファイルを開くには、

Open( fileName : STRING );

を使います。この文字列引数は
PROCEDURE Example801;
BEGIN
	Open( 'El Capitan HD:Users:aa:Desktop:sample.txt' );{Macintosh}
END;
Run( Example801 );
PROCEDURE Example802;
BEGIN
	Open( 'C:\Users\aa\Desktop\sample.txt' );{Windows}
END;
Run( Example802 );
のように、ファイルまでのパスを渡します。 入力データの場所が任意の場合には、ユーザにファイルの位置を選択してもらうために、

GetFile( VAR fileName : STRING );

を使います。この文字列引数はユーザの選んだファイルのある場所のパスを返してくれます。

PROCEDURE Example803;
VAR
	fileName : STRING;
BEGIN
	GetFile( fileName );
	Open( fileName );
END;
Run( Example803 );
GetFileを使った場合には、ユーザがキャンセルボタンを押したかどうかをチェックし、
キャンセルが押された場合にはファイルを開いたりしないようにしなくてはいけません。その場合には、

DidCancel : BOOLEAN;

を使います。キャンセルを押した場合に、TRUEを返します。
PROCEDURE Example804;
LABEL
	9999;
VAR
	fileName : STRING;
BEGIN
	GetFile( fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Open( fileName );

9999:
END;
Run( Example804 );

 2.データを読み込む

読み込むデータの区切りはタブまたは改行でなければなりません。
10.0	20.0	30.0
40.0	50.0	60.0
70.0	80.0	90.0
データの読み込みには、

Read( VAR z1, z2, ..., zN : ANY );

ReadLn( VAR z1, z2, ..., zN : ANY );

を使います。
Read(ReadLn)はデータをパラメータの数だけ読み込みます。ReadLnは、読み込んだ後に改行します。
PROCEDURE Example805;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	GetFile( fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Open( fileName );

	ReadLn( x1, y1, z1 );
	ReadLn( x1, y1, z1 );
	Read( x1, y1, z1 );
9999:
END;
Run( Example805 );
また、データのレコード数が予めわかっていない場合には、

EOF( fileName : STRING ) : BOOLEAN;

を使います。読み込み位置が終端であればTRUEを返します。
PROCEDURE Example806;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	GetFile( fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Open( fileName );

	WHILE NOT EOF( fileName ) DO
	BEGIN
		ReadLn( x1, y1, z1 );
	END;

9999:
END;
Run( Example806 );

 3.ファイルを閉じる

VectorScriptは同時にオープンできるファイルはひとつになります。
別のファイルをオープンする前に、すでに開いているファイルを閉じる必要があります。
ファイルを閉じるには、

Close( fileName : STRING );

を使います。
PROCEDURE Example807;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	GetFile( fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Open( fileName );
	
	WHILE NOT EOF( fileName ) DO
	BEGIN
		ReadLn( x1, y1, z1 );
	END;
	Close( fileName );

9999:
END;
Run( Example807 );

・ファイルの書き込み
 ファイルからデータを書き込むには以下の手順で行います。

 1.ファイルのオープン

書き込む場合のファイルのオープンは2通りあります。ファイルを新規に作成して開く場合には、

Rewrite( fileName : STRING );

を使います。すでにあるファイルに追加するには、

Append( fileName : STRING );

を使います。この文字列引数には
PROCEDURE Example808;
BEGIN
	Rewrite( 'El Capitan HD:Users:aa:Desktop:sample.txt' );{Macintosh}
END;
Run( Example808 );
PROCEDURE Example809;
BEGIN
	Append( 'C:\Users\aa\Desktop\sample.txt' );{Windows}
END;
Run( Example809 );
のように、ファイルまでのパスを渡します。 出力データの場所が任意の場合には、ユーザにファイルの位置を選択してもらうために、

PutFile( commentStr, defaultStr : STRING; VAR fileName : STRING );

を使います。最後の文字列引数はユーザの選んだ位置へのファイルパスを返してくれます。

PROCEDURE Example810;
VAR
	fileName : STRING;
BEGIN
	PutFile( 'ファイルの取り出し', '名称未設定', fileName );
	Rewrite( fileName );
END;
Run( Example810 );
PutFileを使った場合にも、ユーザがキャンセルボタンを押したかどうかをチェックし、
キャンセルが押された場合にはファイルを開いたりしないようにしなくてはいけません。その場合にも、

DidCancel : BOOLEAN;

を使います。キャンセルを押した場合に、TRUEを返します。
PROCEDURE Example811;
LABEL
	9999;
VAR
	fileName : STRING;
BEGIN
	PutFile( 'ファイルの取り出し', '名称未設定', fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Rewrite( fileName );

9999:
END;
Run( Example811 );

 2.データを書き出す

データの書き出すには、

Write( VAR z1, z2, ..., zN : ANY );

WriteLn( VAR z1, z2, ..., zN : ANY );

を使います。
Write(WriteLn)はデータをパラメータの数だけ書き出します。WriteLnは、書き出した後に改行します。
123
231
312
PROCEDURE Example812;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	x1 := 1.0;
	y1 := 2.0;
	z1 := 3.0;
	PutFile( 'ファイルの取り出し', '名称未設定', fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Rewrite( fileName );

	WriteLn( x1, y1, z1 );
	WriteLn( y1, z1, x1 );
	Write( z1, x1, y1 );

9999:
END;
Run( Example812 );
ただし、このままですとデータの区切りがありません。
タブ区切りにしたい時は、

Tab( n : INTEGER );

を使います。スペース区切りにしたい時は、

Space( n : INTEGER );

を使います。
1	2	3
2	3	1
3	1	2
PROCEDURE Example813;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	x1 := 1.0;
	y1 := 2.0;
	z1 := 3.0;
	PutFile( 'ファイルの取り出し', '名称未設定', fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Rewrite( fileName );

	Write( x1 );tab( 1 );Write( y1 );tab( 1 );WriteLn( z1 );
	Write( y1 );tab( 1 );Write( z1 );tab( 1 );WriteLn( x1 );
	Write( z1 );tab( 1 );Write( x1 );tab( 1 );Write( y1 );

9999:
END;
Run( Example813 );

 3.ファイルを閉じる

書き出す場合にも同時にオープンできるファイルはひとつになります。
別のファイルをオープンする前に、すでに開いているファイルを閉じる必要があります。
ファイルを閉じるには、

Close( fileName : STRING );

を使います。
PROCEDURE Example814;
LABEL
	9999;
VAR
	fileName : STRING;
	x1, y1, z1 : REAL;
BEGIN
	x1 := 1.0;
	y1 := 2.0;
	z1 := 3.0;
	PutFile( 'ファイルの取り出し', '名称未設定', fileName );
	IF DidCancel THEN
	BEGIN
		GOTO 9999;
	END;
	Rewrite( fileName );

	Write( x1 );tab( 1 );Write( y1 );tab( 1 );WriteLn( z1 );
	Write( y1 );tab( 1 );Write( z1 );tab( 1 );WriteLn( x1 );
	Write( z1 );tab( 1 );Write( x1 );tab( 1 );Write( y1 );

	Close( fileName );
9999:
END;
Run( Example814 );

VectorScriptに関するお問い合わせ

VectorScriptに関するお問合せは、以下からお問い合せください。

エーアンドエー株式会社 研究開発室

email:develop@aanda.co.jp