テキスト形式の情報を読み込む方法です。今回は複数行のテキストファイルから1行づつ読み込みます。CSVファイルも同じように読み込めます。
複数行のテキストファイル(拡張子 .txt)にある文字を読み込む方法です。
予備知識
関数 open, close, read-line を使って1行のテキストファイルから読み込む記事です。
これを元に今回は複数行読み込む方法を説明します。
複数行のテキストファイルを読み込むのに繰り返し関数 while を使います。
ファイル読み込み
read-line は、読み込むたびに次の行を読み込みます。
関数 open で開く。
関数 read-line で1行読み込む
関数 while で繰り返して1行づつ処理をしていく
関数 close で閉じる
という流れです。
ではまず、実際にテキストファイルを用意して、コマンドラインに入力しながら read-lineの動きを確認してみましょう。
テキストファイルの準備
メモ帳で文字が入ったテキストファイルを用意してください。
今回は複数行試します。
open で開く
それでは、コマンドラインに入力しながら関数の動きを見ていきましょう。
コマンドラインがAutoCADにありませんか?
CTRL+9 はコマンドライン表示/非表示のショートカットです。
もしくは、commandline はコマンドラインを表示させるコマンドです。
まず、関数 open を使って開きます。
setq を使って戻り値を変数 FileIDに代入しておきます。
コマンドラインに下記の通り入力してください。(”C:/JagaimoLisp/DATA.txt” の部分は保存したメモ帳のパスを入れてください)”r” は読み込みモードです。
(setq FileID (open "C:/JagaimoLisp/DATA.txt" "r"))
入力後、エンターキーで実行です。
read-line で1行目を読み込む
無事にファイルが開いたら (read-line FileID) で読み込みます。
わかりやすいように 関数 alert を使って読み込んだ文字列をメッセージボックスで表示してみましょう。
(alert (read-line FileID))
1行目のテキストを読み込んでメッセージボックスが現れます。
read-line で2行目読み込む
1行目を読み込んだ後、全く同じコードを入力します。
(alert (read-line FileID))
2行目のテキストを読み込んでメッセージボックスが現れます。
また同じコードを入力すれば3行目のテキストを使ってメッセージボックスが現れます。
このように、関数 read-line を繰り返すことで1行づつ次々と読み込むことが出来ます。
close で閉じる
使い終わったら (close FileID) でテキストファイルを閉じます。
(close FileID)
関数 while を使って read-line を繰り返す
上記の例をまとめてコマンドにすると以下のようになります。
コマンド名は test です。
テキストを1行づつ読み込んでメッセージボックスで読み込んだ文字を表示します。
(defun c:test (/ Tx FileID)
(if (setq FileID (open "C:/JagaimoLisp/DATA.txt" "r")) ;読み込みモードで開く
(progn ;もしファイルを開けたら
(while (setq Tx (read-line FileID)) ;文字列がある間1行づつ読み込む。
(alert Tx) ;読み込んだ文字列をメッセージボックスに表示
);while
(close FileID);ファイルを閉じる
);progn
(alert "ファイルが見つかりませんでした") ;開けなかったら場合はこのメッセージを出す
);if
(princ));defun
指定したパスからファイルが読み込めなかった場合に備えて関数 if を入れて、もしファイルが開けた場合にだけ read-line に進んでテキストを読み込んで表示させるようにしています。
(while (setq Tx (read-line FileID))
関数 while は条件式が nil でなければ繰り返します。
今回の場合、条件式は (setq Tx (read-line FileID)) です。
最終行に行くまではread-lineで1行づつ読み込まれ、変数Txに代入された値が戻り値になるので繰り返されます。
最終行を終えると戻り値が nil になるのでwhile の繰り返しが終わります。
まとめ
- 関数 read-lineは開いたファイルを一行づつ読み込む関数。
- 関数 while を使うと最後の行まで順番に読み込んでいくプログラムになる。
参考記事
関数 open, close, read-line について。
関数 while について。
戻り値 nil について。
関数 alert について。
関数 if について。
ファイルを読み込んで使うコマンド例。
Comments