お勉強2

広告

気さくなブログ

~AWK編
目的:Jw_cadへ出力する時、寸法属性を無くすようにスクリプトを変更してみる。
今度は引出し文字。
外変作者さんから公開されているオリジナルスクリプトの一部分。

#寸法の設定
if(S_G<0){print “lg”MLG;SG=MLG} else {print “lg”S_G;SG=S_G};
if(S_L<0)print “ly”MLY;else print “ly”S_L;
printf(“cn%snlc%snlt%snpn%sn”,S_M,S_C,S_T,S_P);
#出力
P_Sline_Z(XA1,YA1,XA2,YA2,SG,”z3″);
Yajirusi(XA1,YA1,XA2,YA2,SG,DO,”z3″);
LXM=length(MJ)*(W[S_M]+D[S_M])/2+W[S_M];
if(XP2>XP3){XB1=XA2-LXM; XB2=XA2}else{XB1=XA2; XB2=XA2+LXM};
P_Sline_Z(XB1,YA2,XB2,YA2,SG,”z3″);
printf(“cs %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],(YA2+S_B/2)*S[SG],10,0,MJ);

オリジナルのjwc_temp.txt出力

lg0
ly9
cn4
lc5
lt1
pn4
z3
-4.319797e+003 4.550775e+003 -4.282081e+003 4.649581e+003
z3
-4.319797e+003 4.550775e+003 -4.316717e+003 4.580616e+003
z3
-4.319797e+003 4.550775e+003 -4.302209e+003 4.575078e+003
z3
-4.282081e+003 4.649581e+003 -3.952081e+003 4.649581e+003
cs -4.252081e+003 4.657081e+003 1.000000e+001 0.000000e+000 “3-20キリ
lg0
lyf
lc5
lt1
pn
cn4

“cs”と”z3″を出力しなきゃ、良いんじゃネ? じゃ、なくて今度は横文字しか使わないから”cs”を”ch”に変更か。オリジナル行に#マーク無効にしておいて、変更してみる。
改造後スクリプト。

#寸法の設定
if(S_G<0){print “lg”MLG;SG=MLG} else {print “lg”S_G;SG=S_G};
if(S_L<0)print “ly”MLY;else print “ly”S_L;
printf(“cn%snlc%snlt%snpn%sn”,S_M,S_C,S_T,S_P);
#出力
# P_Sline_Z(XA1,YA1,XA2,YA2,SG,”z3″);
P_Sline_Z(XA1,YA1,XA2,YA2,SG,””);
# Yajirusi(XA1,YA1,XA2,YA2,SG,DO,”z3″);
Yajirusi(XA1,YA1,XA2,YA2,SG,DO,””);
LXM=length(MJ)*(W[S_M]+D[S_M])/2+W[S_M];
if(XP2>XP3){XB1=XA2-LXM; XB2=XA2}else{XB1=XA2; XB2=XA2+LXM};
# P_Sline_Z(XB1,YA2,XB2,YA2,SG,”z3″);
P_Sline_Z(XB1,YA2,XB2,YA2,SG,””);
 printf(“ch %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],(YA2+S_B/2)*S[SG],10,0,MJ);
# printf(“cs %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],(YA2+S_B/2)*S[SG],10,0,MJ);

改造後のjwc_temp.txt出力

lg0
ly9
cn4
lc5
lt1
pn4
-4.319168e+003 4.550510e+003 -4.267969e+003 4.661308e+003
-4.319168e+003 4.550510e+003 -4.314061e+003 4.580072e+003
-4.319168e+003 4.550510e+003 -4.299964e+003 4.573558e+003
-4.267969e+003 4.661308e+003 -3.937969e+003 4.661308e+003
ch -4.237969e+003 4.668808e+003 1.000000e+001 0.000000e+000 “3-20キリ
lg0
lyf
lc5
lt1
pn
cn4

空白行があるけど見なかったことにしよう(ぉぃ)
JacConvertで変換→AutoCAD LTで読込み。
わーい、うまくいったっぽい (^_^)v たぶん。
20080112a.gif


卯之介さんに教えてもらって改行もなくなりました。
この際、全文記載しとこ。

#円に引出線と寸法を付加するプログラム(引出文字.awk [2008.1.12変更])
BEGIN{FLG=0; FLY=0; FCL=0; FTP=0; FTN=0; FMJ=0; # フラッグの初期化
if(index(FM,”$$”)==0)FM=”$$”;
};
#初期状態の保存及び現状の抽出
/^hs/ {S[0]=$2; S[1]=$3; S[2]=$4; S[3]=$5; S[4]=$6; S[5]=$7;
S[6]=$8; S[7]=$9; S[8]=$10; S[9]=$11; S[“a”]=$12;
S[“b”]=$13;S[“c”]=$14;S[“d”]=$15;S[“e”]=$16;S[“f”]=$17};# 縮尺
/^hcw/{W[1]=$2; W[2]=$3; W[3]=$4; W[4]=$5; W[5]=$6;
W[6]=$7; W[7]=$8; W[8]=$9; W[9]=$10; W[10]=$11}; # 文字幅
/^hch/{H[1]=$2; H[2]=$3; H[3]=$4; H[4]=$5; H[5]=$6;
H[6]=$7; H[7]=$8; H[8]=$9; H[9]=$10; H[10]=$11}; # 文字高
/^hcd/{D[1]=$2; D[2]=$3; D[3]=$4; D[4]=$5; D[5]=$6;
D[6]=$7; D[7]=$8; D[8]=$9; D[9]=$10; D[10]=$11}; # 文字間
/^lg/ {LYG=substr($1,3); if(FLG==0){MLG=LYG;FLG=1} }; # レイヤグループ
/^ly/ {LAY=substr($1,3); if(FLY==0){MLY=LAY;FLY=1} }; # レイヤ
/^lc/ {COL=substr($1,3); if(FCL==0){MCL=COL;FCL=1} }; # 線色
/^lt/ {TYP=substr($1,3); if(FTP==0){MTP=TYP;FTP=1} }; # 線種
/^pn/ {TEN=substr($1,3); if(FTN==0){MTN=TEN;FTN=1} }; # 点種
/^cn/ {MOJ=substr($1,3); if(FMJ==0){MMJ=MOJ;FMJ=1} }; # 文字種
#処理
/^hq/{next}
/^hp2/{XP2=$2; YP2=$3; next};
/^hp3/{XP3=$2; YP3=$3; next};
/^ci/{CX=$2/S[LYG]; CY=$3/S[LYG]; CR=$4/S[LYG]; CA=$5; CB=$6; CC=$7; CD=$8;
#寸法文字の作成
MJD=”***”;
if(A[2]>0){
if(HD==”=”){for(i=1;i< =N;i++)if(A[i]==($4*2)){MJD=B[i];break}}else if(HD==">=”){for(i=1;i< =N;i++)if(A[i]>=($4*2)){MJD=B[i];break}}else
if(HD==”>”){for(i=1;i< =N;i++)if(A[i]>($4*2)){MJD=B[i];break}} };
sub(/##/,MJD,FM);
TMT=”%.” S_K “f”; MJ=sprintf(TMT,$4*2);
if(S_O==”無”)MJ=delSP(MJ);
if(S_Z==”全”)MJ=HAN_ZEN(MJ);
sub(/$$/,MJ,FM); MJ=FM;
#処理本体
XA2=XP2/S[MLG]; YA2=YP2/S[MLG];
DO=katamuki(CX,CY,XA2,YA2);
XA1=CR*cos(DO)+CX; YA1=CR*sin(DO)+CY; #矢印先端の座標
};
END{
#寸法の設定
if(S_G<0){print “lg”MLG;SG=MLG} else {print “lg”S_G;SG=S_G};
if(S_L<0)print “ly”MLY;else print “ly”S_L;
printf(“cn%snlc%snlt%snpn%sn”,S_M,S_C,S_T,S_P);
#出力
# P_Sline_Z(XA1,YA1,XA2,YA2,SG,”z3″);
P_Sline_Z(XA1,YA1,XA2,YA2,SG,””);
# Yajirusi(XA1,YA1,XA2,YA2,SG,DO,”z3″);
Yajirusi(XA1,YA1,XA2,YA2,SG,DO,””);
LXM=length(MJ)*(W[S_M]+D[S_M])/2+W[S_M];
if(XP2>XP3){XB1=XA2-LXM; XB2=XA2}else{XB1=XA2; XB2=XA2+LXM};
# P_Sline_Z(XB1,YA2,XB2,YA2,SG,”z3″);
P_Sline_Z(XB1,YA2,XB2,YA2,SG,””);
printf(“ch %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],(YA2+S_B/2)*S[SG],10,0,MJ);
# printf(“cs %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],(YA2+S_B/2)*S[SG],10,0,MJ);
# printf(“cs %e %e %e %e “%sn”,(XB1+W[S_M]/2)*S[SG],-(YA2+S_B/2)*S[SG],10,0,MJ);
#初期状態の復活 レイヤグループ レイヤ 線色 線種 点種 文字種
printf(“lg%snly%snlc%snlt%snpn%sncn%sn”,MLG,MLY,MCL,MTP,MTN,MMJ);
};
#——————— 関 数 ————————-
#円周率(π)
function pi(){return atan2(0,-1)}
#ラジアン
function rd(A){return (A*pi()/180)}
#線の出力 縮尺・属性込み
function P_Sline_Z(M1,M2,M3,M4,LYG,FZ){
# print FZ;
printf(” %e %e %e %en”,M1*S[LYG],M2*S[LYG],M3*S[LYG],M4*S[LYG]) }
#矢印の作図
function Yajirusi(X1,Y1,X2,Y2,LG,DO,FZ ,XA,YA,XB,YB){
if(S_N==0)printf(“pt %e %en”,X1,Y1); else {
XA=S_N*cos(DO+rd(S_S))+X1; YA=S_N*sin(DO+rd(S_S))+Y1;
XB=S_N*cos(DO-rd(S_S))+X1; YB=S_N*sin(DO-rd(S_S))+Y1;
P_Sline_Z(X1,Y1,XA,YA,LG,FZ); P_Sline_Z(X1,Y1,XB,YB,LG,FZ) };
}
#行始・行末の空白を取り去る
function delSP(MJ ,T,A,B){
T=index(MJ,”.”); A=substr(MJ,1,T-1); B=substr(MJ,T);
gsub(/^[  ]+|[  0.]+$/,””,B); return (A B)
}
#半角文字を全角に変換
function HAN_ZEN(MJ, ZEN,HAN,k){
ZEN=”0123456789R”;
HAN=”0123456789R”;
for(k=1;k<12;k++){gsub(jsubstr(HAN,k,1),jsubstr(ZEN,k,1),MJ)};
return(MJ);
}
#直線の傾き
function katamuki(X,Y,XHP,YHP){ return atan2( (YHP-Y),(XHP-X) ) }

広告

お勉強2” に対して3件のコメントがあります。

  1. より:

    どこか離れた所にある
    function P_Sline_Z { … }
    function Yajirusi { … }
    の中で、6つ目のパラメータをprintしている部分があるんじゃないかと思います。そちらに#をつければ空行は出ないかも…

  2. kisa より:

    ふえー、よく分かりますね!
    調べてみます。

  3. kisa より:

    スクリプト最後のほうに関数がありまして、そこの
    『 print FZ; 』
    が、改行しているみたいなので無効にしたらできました。
    教えてもらったおかげで空白行がなくなりました。
    ありがとうございます。

コメントは受け付けていません。

08_食

前の記事

昼飯
08_食

次の記事

昼飯