TOP PAGE > 記事閲覧
LISPを使ったCSVファイルへの読み書き
投稿日 : 2015/11/25(Wed) 17:24
投稿者 アルサポ
参照先
LISPを使ってEXCELファイルを読み込んだり、書き込んだりするには、
「vlax-」で始まる関数を使えばEXCELファイルを利用できようです。

でもちょっと面倒で、まだまだ習得に時間がかかりそうなので、
今回は、CSVファイルを読み込んだり、書き込んだりするLISPを紹介しようと思います。

なぜ、CSVファイル対応のLISPを作成したかというと、CSVファイルはEXCELで作成(編集)が出来るからです。
それは、座標の入力、文字の内容などの読み込み元となるデータを作成する時に
テキストエディタで作成するよりEXCELを使って作成した方が、一般的に使いやすいと思ったからです。

それにLISPの内容でいえば、「ファイルを開く」、「書き込むまたは読み込む」、「ファイルを閉じる」の順で
プログラムを作成することが出来るので、EXCELファイルを利用するプログラムを作成するより、
LISPの内容が簡易ではないかと思いました。

それでは、「文字列をCSVファイルに書き込むLISP」と「CSVファイルから文字列を読み込むLISP」を紹介します。
このLISPを参考に色々な便利コマンドを作成してみてはどうでしょうか?


;文字の内容をCSVファイルに書き込む。
(defun C:CsvWrite (/ filePath fw txt entTxt)
(setq filePath "C:\\Autodesk\\Sample.CSV");決まった場所に書きこむファイルを指示する場合
;(setq filePath (getfiled "CSVファイルを選択" "" "CSV" 16));使用する度にファイルを指示する場合

;open関数:(open filepath mode)
;mode "r"読み込み用、"w"書き込み用、"a"追記用
(setq fw (open filePath "a"));今回は追記で作成
(if (/= fw nil)
(progn
(setq txt (entsel "\n内容を取得する文字列を選択:"))
(setq entTxt (entget (car txt)))
(write-line (cdr (assoc 1 entTxt)) fw);1行ずつCSVに書き込み
(close fw)
);progn
(prompt "\n <<エラー>> ファイルが開けません。")
);if
(close fw);CSVを閉じる
(princ)
)

;CSVファイルを読み込んで文字列に貼り付ける。
(defun C:CsvRead (/ filePath fr txt pstTxt entpstTxt)
(setq filePath (getfiled "CSVファイルを選択" "" "CSV" 16))

;open関数:(open filepath mode)
;mode "r"読み込み用、"w"書き込み用、"a"追記用
(setq fr (open filePath "r"))
(if (/= fr nil)
(progn
(while
(setq txt (read-line fr));1行ずつCSVを読み込む
(prompt (strcat "\n<" txt ">"))
(setq pstTxt (entsel "を貼り付ける文字列を選択:"))

(setq entpstTxt (entget (car pstTxt)))
(setq entpstTxt (subst (cons 1 txt) (assoc 1 entpstTxt) entpstTxt));文字の内容をかえる
(entmod entpstTxt)
);while
);progn
(prompt "\n <<エラー>> ファイルが開けません。")
);if
(close fr);CSVを閉じる
(princ)
)
記事編集 編集
Re: LISPを使ったCSVファイルへの読み書き
投稿日 : 2015/11/25(Wed) 17:41
投稿者 アルサポ
参照先
先ほどは、文字列の内容を読み込んだり、書き込んだりするLISPの例を紹介しましたが、
今回は座標値が書いてあるCSVファイルからポリラインを作成するLISPを紹介します。

CSVファイルの最後に「c」と入力したのは閉じた状態にしたい場合は「c」、閉じた状態に
しない場合は、座標値のみ記入しておけば処理を行います。

今回はポリラインを作成しましたが、座標値の扱いを理解できれば、「点」や「文字」なども
作成することが容易なのではないでしょうか? 是非試して見て下さい。


下記の内容でTEST.CSVファイルを作成して下さい。----------
0,0
0,50
50,50
50,0
c


下記の内容はLISPの内容です。-----------------------------
(defun C:CsvRead2 (/ filePath fr txt)
(setq filePath (getfiled "CSVファイルを選択" "" "CSV" 16))
(setq fr (open filePath "r"));ファイルを開く
(if (/= fr nil)
(progn
(command "_PLINE")
(while
(setq txt (read-line fr));1行ずつCSVを読み込む
(if (= (substr txt 1 1) "c")
(command "c");閉じる場合
(command txt);座標入力の場合
);if
);while
(command "")
);progn
(prompt "\n <<エラー>> ファイルが開けません。")
);if
(close fr);CSVを閉じる
(princ)
)
記事編集 編集
ページの上に移動
件名 スレッドをトップへソート
名前
メールアドレス
URL
暗証キー
画像認証 (右画像の数字を入力) 投稿キー
コメント


- WEB PATIO -