当掲示板は、AuroCADマクロ屋本舗 の掲示板です。
AutoCADのマクロ に関する質問の前に 【 マクロ使用前の注意事項 】 を、必ずお読みください。

尚、新規投稿フォーム下の【 新規投稿時のお願い 】を確認の上、新規投稿をお願い致します。
ファイル名
$(substr,$(getvar,"dwgname"),1,5)
上記を使ってフィールドのDIESEL式でファイル名を取り込んでいるのですが
1文字目から5文字目となっているのを,例えば_(アンダーバー)や-(ハイフン)の前文字まで取得する事はできるのでしょうか
よろしくお願いします
  • FUKUDA
  • 2017/05/17 (Wed) 11:51:12
Re: ファイル名
FUKUDA様

_(アンダーバー)や-(ハイフン)の前文字までとありますが
文字を判断するのは難しいと思います。
もし_(アンダーバー)や-(ハイフン)より後の文字数が決まっていれば
下記マクロで取得できると思いますが

^C^Csetenv;nastr;$M=$(-,$(strlen,"$(getvar,dwgname)"),<_(アンダーバー)や-(ハイフン)以降の文字数>);setenv;nasub;$M="$(substr,$(getvar,dwgname),1,$(getenv,nastr))";^Z

<_(アンダーバー)や-(ハイフン)以降の文字数>の部分を
任意の半角数字に変えてください
  • chibi-tom
  • 2017/05/17 (Wed) 17:19:08
Re: ファイル名
chibi-tomさん
ありがとう御座います

フィールドのDIESEL式では出来ないのですね.
ご足労かけました.
^C^Csetenv;nastr;$M=$(-,$(strlen,"$(getvar,dwgname)"),3);setenv;nasub;$M="$(substr,$(getvar,dwgname),1,$(getenv,nastr))";^Z
上記の式では動きませんでした.式が間違ってますでしょうか
LT2014
  • FUKUDA
  • 2017/05/17 (Wed) 19:41:07
Re: ファイル名
たぶん、下のマクロで出来ると思いますが、ファイル名にスペースなど特別な文字が入っているとまずいです。
また、フィールドでは繰り返しマクロが使えないのでやりたことには適さないかも。
やりたいことを書けば誰かが別な方法を考えてくれるかも知れません。

*^C^C$M=setenv;to;0;$(if,$(=,$(getenv,to),0),;sstr;検索文字列を入力:^X\;cnt;1;;to;1)$(if,$(=,$(getenv,to),1),$(if,$(eq,$(substr,$(getvar,dwgname),$(getenv,cnt),$(strlen,$(getenv,sstr))),$(getenv,sstr)),;to;2,;cnt;$(+,$(getenv,cnt),1);;to;1))$(if,$(=,$(getenv,to),2),$(substr,$(getvar,dwgname),1,$(-,$(getenv,cnt),1))\)^M
  • zukki-
  • 2017/05/17 (Wed) 19:41:23
Re: ファイル名
言葉足らずでした.
ファイル名を図番として使用しています
A-01.dwgを図面上ではA-01としています.連番になっているのですが,追加があったりするとA-01A.dwgとなります
$(substr,$(getvar,"dwgname"),1,4)をブロックの属性定義文字の属性編集でフィールドを挿入でファイル名を呼んできています
ファイル名が5文字や6文字になった場合は5や6と編集をしています.その手間が省けたらと考えたんです.
  • FUKUDA
  • 2017/05/17 (Wed) 20:03:00
Re: ファイル名
拡張子を除きたいのなら
$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dwgname)),4))
でいけると思います。
  • zukki-
  • 2017/05/17 (Wed) 20:12:12
Re: ファイル名
zukki-さんありがとう御座います
A-04_ABC-01.dwgとかの長いファイル名があったりします.その場合のアンダーバーの前文字までを図番として呼んできたいんですよね.
資料だと文字数でしか指定が出来ないようですね.
通常のファイル名の場合は,この式を利用させてもらいます,ありがとう御座います.
  • FUKUDA
  • 2017/05/18 (Thu) 07:55:50
Re: ファイル名
FUKUDA様

フィールドのDIESEL式ちょっとやってみました。
自分がやろうとしたことはzukki-様の
$(substr,$(getvar,dwgname),1,$(-,$(strlen,$(getvar,dwgname)),4))でした。

一応報告まで
  • chibi-tom
  • 2017/05/18 (Thu) 17:02:29
Re: ファイル名
chibi-tom
ありがとう御座います.使わせていただきます
  • FUKUDA
  • 2017/05/18 (Thu) 18:26:46
Re: ファイル名
フィールドのほうに
$(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と入力すれば任意の文字列の前のファイル名を取り出せます。
  • zukki-
  • 2017/05/18 (Thu) 21:17:10
Re: ファイル名
zukki-さん
ありがとう御座います.おもっていた通りに動いてくれています.
検索文字_(アンダーバー),変数名hogeを入力してマクロに組み込んで動かす事はできないのでしょうか?
よろしくお願いします
  • FUKUDA
  • 2017/05/19 (Fri) 09:40:12
Re: ファイル名
\をそれぞれ_;、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),;フィールドの変数名を入力:^Xhoge;$(-,$(getenv,cnt),1);updatefield;all;;re;^Cid;)^M

で出来ますが、
環境変数hogeをほかの人が書き換えるとフィールドの値が変わってしまうので、hogeを誰も使わないような長めの変数名にすることをお勧めします。
例えば、_だったらfkd-under-barなど。
  • zukki-
  • 2017/05/19 (Fri) 12:16:20
Re: ファイル名
zukki-さん ありがとう御座います
ファイル1:12345_S
ファイル2:A-12_S
このマクロだと_(アンダーバー)を超えて表示されてしまします
ファイル1で文字数を5字数まで取ると
ファイル2でも_(アンダーバー)を越えて5文数を表示してしまいます
  • FUKUDA
  • 2017/05/19 (Fri) 13:54:38
Re: ファイル名
チャットのほうも見ました。
やっぱりコンピューターごとに保存される環境変数を使うのはまずいみたいです。
図面ごとに保存される変数を間借りすればいいかもしれませんが、それもまた問題を起こしそう。
やはり、数値を直接書きえるしかないのかな、マクロでフィールドを編集できればいいのだけどそれも無理だし。
ちょっと他の方法がないか考えてみます。
  • zukki-
  • 2017/05/19 (Fri) 16:21:56
Re: ファイル名
zukki-さん ご足労かえかけます
$(substr,$(getvar,"dwgname"),1,4)の数字を変えるだけなので,その都度,修正したいと思います
  • FUKUDA
  • 2017/05/19 (Fri) 16:39:16
Re: ファイル名
いまさらですが、思いついたのでメモです。

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

下記マクロを実行すればファイル名の最初のアンダーバー前までの文字が取得できます。
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),setenv;str0;1;setenv;to;1,)$(nth,$(getenv,to),,$(if,$(eq,_,$(substr,$(getvar,dwgname),$(getenv,str0),1)),setenv;filename-field;$(-,$(getenv,str0),1);^Cregen;,setenv;str0;$(+,$(getenv,str0),1);setenv;to;1))^M

注意点はzukki-様も言っていますが、他で変数"filename-field"を変えるとフィールドの値が変わってしまうことです。
  • chibi-tom
  • 2017/06/13 (Tue) 15:06:29
Re: ファイル名
chibi-tomさん
ありがとう御座います.
  • FUKUDA
  • 2017/06/15 (Thu) 11:28:17

返信フォーム






プレビュー (投稿前に内容を確認)