Sponsored links

【AutoLISP サンプル】テキストの内容を今日の日付に変更

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

テキスト/マルチテキストを選択するとテキストの内容が今日の日付に変わる、テキスト変換コマンドです。

Sponsored links

コマンドの内容

コマンドを実行すると、テキスト/マルチテキストを選択するように促されます。

空振りクリックミス対策として、テキスト/マルチテキスト以外を選択したり、何もない所をクリックすると処理が進まずに、テキスト/マルチテキストを選択するように促し続けます。

テキスト/マルチテキストを選択すると、その内容が変更されます。
3パターン用意しました。お好みによって、コマンド名や日付形式を変更してみてください。

コマンド名は、

  • Date1
  • Date2
  • Date3

の3つで、それぞれのコマンドを実行してテキスト/マルチテキストを選択すると、以下のようになります。

AutoLISP プログラムサンプル

;/////////////////////////////////////////
;JagaimoLisp コマンド関数
;テキストチェンジ-今日の日付 var.20210810
;/////////////////////////////////////////

(defun c:Date1 ( / a Date);Date-YYYY-MM-DD 

(setq a (itoa (fix (getvar "CDATE"))))
  (setq Date (strcat (substr a 1 4) "-" (substr a 5 2) "-" (substr a 7 2))) 

   (Jaga04aTxCh Date)
(princ));defun

;====================================================

(defun c:Date2 ( / a Mo Date);Date-MonthDD_YYYY

  (setq a (itoa (fix (getvar "CDATE"))))
  (setq Mo (substr a 5 2))  
  	(cond 
		((= Mo "01") (setq Mo "JANUARY"))
		((= Mo "02") (setq Mo "FEBRUARY"))
		((= Mo "03") (setq Mo "MARCH"))
		((= Mo "04") (setq Mo "APRIL"))
		((= Mo "05") (setq Mo "MAY"))
		((= Mo "06") (setq Mo "JUNE"))
		((= Mo "07") (setq Mo "JULY"))
		((= Mo "08") (setq Mo "AUGUST"))
		((= Mo "09") (setq Mo "SEPTEMBER"))
		((= Mo "10") (setq Mo "OCTOBER"))
		((= Mo "11") (setq Mo "NOVEMBER"))
		((= Mo "12") (setq Mo "DECEMBER"))
	);cond 
  (setq Date (strcat Mo " " (substr a 7 2) "," (substr a 1 4)))
  
  (Jaga04aTxCh Date) 
(princ));defun

;====================================================
(defun c:Date3 ( / a Mo Date);MonYY

  (setq a (itoa (fix (getvar "CDATE"))))
  (setq Mo (substr a 5 2))  
  	(cond 
		((= Mo "01") (setq Mo "JAN"))
		((= Mo "02") (setq Mo "FEB"))
		((= Mo "03") (setq Mo "MAR"))
		((= Mo "04") (setq Mo "APR"))
		((= Mo "05") (setq Mo "MAY"))
		((= Mo "06") (setq Mo "JUN"))
		((= Mo "07") (setq Mo "JUL"))
		((= Mo "08") (setq Mo "AUG"))
		((= Mo "09") (setq Mo "SEP"))
		((= Mo "10") (setq Mo "OCT"))
		((= Mo "11") (setq Mo "NOV"))
		((= Mo "12") (setq Mo "DEC"))
	);cond 
  (setq Date (strcat Mo "/" (substr a 3 2)))
  
  (Jaga04aTxCh Date)
(princ));defun

;/////////////////////////////////////////



;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;JagaimoLisp関数 【Jaga04aTxCh】テキストチェンジ
;----------------------------------------------
;<引数> NewTx  入れたいテキストの内容
;テキストかマルチテキスト選択でNewTxに変更
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
(defun Jaga04aTxCh (NewTx / Ent)			
	(setq Ent (entget (Jaga00ObjTx)))
	(setq Ent (subst (cons 1 NewTx )(assoc 1 Ent) Ent))
	(entmod Ent)
(princ "\n=========== JagaimoLISP.com ===========")
);defun
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;【Jaga00ObjTx】テキストかマルチテキストだけ選択
;----------------------------------------------------------
(defun Jaga00ObjTx( / Objs Obj Ent0 Flg)
     (setq Objs (ssget "_I" '((0 . "TEXT,MTEXT"))))
	(if Objs 
	    (setq Obj (ssname Objs 0))
		(progn
		    (setq Obj nil Flg "No")
			(while Flg
			     (while (null Obj)
				(setq Obj (car (entsel "\nSelect a TEXT/MTEXT: ")))
			      );while null Obj
			     (setq Ent0 (cdr(assoc 0 (entget OBJ))))
			     (if (or (= "TEXT" Ent0)(= "MTEXT" Ent0)(= "ATTDEF" Ent0)(= "INSERT" Ent0))
			         (setq Flg nil)
			         (setq Flg "No" Obj nil)
			     );if
			);while Flg
		);progn	
	);if
Obj		
);defun
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

参考記事

3つのコマンドの共通部分、「テキスト/マルチテキストを選択」「文字の内容を変更」の部分は別に自作関数にして、3つのコマンドで使いまわしています。

システム変数”CDATE”で得る日付情報は数値なので、関数itoaを使って整数を文字列に変換しています。

条件式 cond を使って、月の数値から英語にしています。

図形選択について、フィルターをかけてテキストかマルチテキストのみ選択できるようにしています。

関数 subst と entmod を使い、テキスト/マルチテキストの内容を書き換えています。

Comments