« 文字整列 | トップページ | デスクトップにショートカット »

2022年11月 8日 (火)

小数点位置揃え

数字を小数点位置を揃えて整列させる外部変形です。
対象は、半角数字の水平横文字です。

Photo_20221108002301

@if(0==1) //小数点位置揃え
@echo off
REM #jww
REM #cd
REM #h3 範囲内の文字を選択
REM #hc 範囲選択してください
REM #0 作図位置を指定してください
REM #e
cscript //nologo //e:jscript "%~f0" %*
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
/////
fs=new ActiveXObject( "Scripting.FileSystemObject" )
r=fs.OpenTextFile("jwc_temp.txt")
w=fs.CreateTextFile("temp.txt")
//ユーザー設定
chsp=1 //文字間
//初期設定
x0=0;y0=0 //作図原点
sp=" " //スペース
dq="\"" //ダブルコーテーション
pd="." //ピリオド
i=0;j=0;k=0 //カウンタ
//配列
s_chr=[];sort=[];chr=[];ch=[];num=[]
//テキストデータ読込み
while (!r.AtEndOfLine) {
line=r.ReadLine()
if(/hq/.test(line)){
// w.WriteLine("hd") //元図を消去
}
//縮尺
else if(/hs/.test(line)){
//各レイヤグループの尺度を配列に格納
hs=line.split(/\s+/)
for(i=0;i<=9;i++){hs[i]=hs[i+1]}
hs["a"]=hs[11];hs["b"]=hs[12];hs["c"]=hs[13]
hs["d"]=hs[14];hs["e"]=hs[15];hs["f"]=hs[16]}
//レイヤグループ名(0~9、a~f)
else if(/lg/.test(line)){
lg=line.substr(2)
s=hs[lg]} //尺度(1/S)
//文字幅
else if(/hcw/.test(line)){
hcw=line.split(/\s+/)
for(i=0;i<=9;i++){hcw[i]=hcw[i+1]}}
//文字高
else if(/hch/.test(line)){
hch=line.split(/\s+/)
for(i=0;i<=9;i++){hch[i]=hch[i+1]}}
//文字間
else if(/hcd/.test(line)){
hcd=line.split(/\s+/)
for(i=0;i<=9;i++){hcd[i]=hcd[i+1]}}
//文字種取得
else if(/cn/.test(line)){
cn=line.split(/\s+/)
cwdu=Number(cn[1])
chtu=Number(cn[2])
cdsu=Number(cn[3])
cnn=cn[0].substr(2)
cn=cn[0].substr(3,1)
if(cn=="$"){w.WriteLine(line)} //フォント
else {
if(cnn==0){ //任意サイズ
dw=s*(cwdu+cdsu)/2
dh=s*(chtu+chsp)
w.WriteLine(line)}
else {
cwd=Number(hcw[cnn-1]) //文字幅
cht=Number(hch[cnn-1]) //文字高さ
cds=Number(hcd[cnn-1]) //文字間
dw=s*(cwd+cds)/2
dh=s*(cht+chsp) //行間隔
w.WriteLine(line)}}}
//文字データ取得
else if(/^ch/.test(line)){
s_chr[j]=line.split(sp)
j=j+1 }
else{w.WriteLine(line)}}
/////文字データ処理
//降順ソート
sort=ysort(s_chr)
//文字作図
for(k=0;k<j;k++){
chr=sort[k]
dx=chr[3];dy=chr[4];chr=chr[5]
num=chr.split(pd) //小数点以下
lth=num[1].length
x=x0-(3-lth)*dw //X座標シフト
y=y0-k*dh
if(k==0){
w.WriteLine("cc2")}else{} //文字基点(右下)
val=["ch",x,y,dx,dy,chr]
val=val.join(sp)
w.WriteLine(val)}
//ユーザー定義関数
function ysort(ch){
ch=ch.sort(
function(a,b){
return(Number(b[2])-Number(a[2]))
})
return ch}
w.Close();r.Close()

|

« 文字整列 | トップページ | デスクトップにショートカット »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 文字整列 | トップページ | デスクトップにショートカット »