AutoCADマクロ屋本舗 掲示板


指定文字以降のファイル名取得

1:mappy :

2024/04/26 (Fri) 11:25:04

いつもご教授ありがとうございます。

ファイル名と図面名称が一致しないことが度々あるのでそれを解消したく、
以下のマクロの改造をお願いできないでしょうか?

使用CADのバージョン:AutoCAD2025

2017年5月18日 『ファイル名』のスレの中の


フィールドのほうに
$(substr,$(getvar,dwgname),1,$(getenv,hoge))
と設定して

下記マクロを実行
*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;sstr;検索文字列を入力<$(getenv,sstr)>:^X\;cnt;1;;to;1)$(if,$(=,$(getenv,to),1),$(if,$(or,$(eq,$(substr,$(getvar,dwgname),$(getenv,cnt),$(strlen,$(getenv,sstr))),$(getenv,sstr)),$(>=,$(getenv,cnt),$(strlen,$(getvar,dwgname)))),;to;2,;cnt;$(+,$(getenv,cnt),1);;to;1))$(if,$(=,$(getenv,to),2),;フィールドの変数名を入力:^X\$(-,$(getenv,cnt),1);updatefield;all;;re;^Cid;)^M
フィールとの変数名を入力でhogeと入力すれば任意の文字列の前のファイル名を取り出せます。

こちらの【任意の文字列の前のファイル名】を【任意の文字列の後のファイル名】を取り出せるようなマクロにしたいです。

ファイル名の例)PT-010 電着置換配管
        ED-2015 電着槽製作図

ここから 図番以降の電着置換配管 や 電着槽製作図 を取り出したいです。

よろしくお願いします。
2:LUNE :

2024/04/26 (Fri) 12:27:16

Lispですが、使い方は同じです。

アイコンに登録
(setq hoge (vl-string-trim ".dwg" (substr (getvar "dwgname") (+ 2 (vl-string-search " " (getvar "dwgname"))))))(command-s "regen")
登録した後、↑一度このアイコンをクリックしてください。

フィールドに登録
フィールド分類:その他 フィールド名:Lisp変数 Lisp変数:hoge(一度アイコンクリックしてないと出てきません)

オプション→基本設定→フィールド更新設定で再作図にチェックを入れておいてください。

他のLispと変数名が被っていると、違う値になる可能性があるので、その場合は、hogeをアイコン登録、フィールド共に変更してください。

マクロに登録した中身は、
ファイル名から半角スペースの位置を探し、その後ろから最後まで取得。
最後に、拡張子が付いている場合は、その拡張子を削除。
そしてフィールド更新のため、再作図。




3:mappy :

2024/04/26 (Fri) 12:59:11

LUNE様

ありがとうございます。
希望通りにできました。
感激です(^^)
4:mappy :

2024/05/01 (Wed) 09:46:19

先日はありがとうございました。

弊社は図面枠の種類がいくつかあるので他の図面枠にも同じ様に設定しようとしたのですが、
何度登録したアイコンをクリックしてもフィールド分類→その他→Lisp変数に『hoge』が出てきません。(hogeを他の値に変えても出てこなかったです)
解決策をご教授いただけないでしょうか?
よろしくお願いします。


以下はコマンドの流れです。

コマンド: (setq hoge (vl-string-trim ".dwg" (substr (getvar "dwgname") (+ 2 (vl-string-search " " (getvar "dwgname"))))))(command-s "regen") ; エラー: 引数のタイプが間違っています: numberp: nil

5:LUNE :

2024/05/01 (Wed) 10:37:49

設定しようとするファイルのファイル名に、半角スペースはありますか?
半角スペースがない場合は、
(vl-string-search " " (getvar "dwgname"))
がnilとなるので、これがエラー文言の原因かと思います。

Lispで行っているのは、
ファイル名から半角スペースの位置を探し、その後ろから最後まで取得。
最後に、拡張子が付いている場合は、その拡張子を削除。
なので、半角スペースがなければ、エラーになります。


6:LUNE :

2024/05/01 (Wed) 10:43:53

(setq hoge (vl-string-trim ".dwg" (substr (getvar "dwgname") (+ 2 (vl-string-search " " (vl-string-subst " " " " (getvar "dwgname")))))))(command-s "regen")

全角スペース、半角スペースどちらにも対応版です。
ただし、スペースが複数ある場合、区切りとなるスペースが文字列の中で最初に出現するスペースとなる必要があります。
7:mappy :

2024/05/01 (Wed) 11:18:45

LUNE様
ありがとうございます。

図枠のファイル名称にスペース入れてなかったです(^_^;)
失礼いたしました。

全角、半角どちらにも対応版を使わせていただきます。

ありがとうございました。

  • 名前: E-mail(省略可):
  • 画像:

Copyright © 1999- FC2, inc All Rights Reserved.