表計算の範囲内合計と同様の外変を(ChatGPTで)作成しましたが、
出力される合計値の末尾に「"」が付いてしまい、削除できません。
例:500" → 500 にしたいです。
どのように修正すればよいかご教示ください。
数値合計.bat
@echo off
REM Jw_cad 外変:数値合計(AWK最小・画面中心フォールバック付き)
REM #jww
REM #cd
REM #h3
REM #hc 合計したい文字(ch)を範囲選択してください
REM #0 書込み位置をクリック
REM #e
gawk -f "数値合計.awk" jwc_temp.txt > temp.txt
if exist jwc_temp.txt del jwc_temp.txt
rename temp.txt jwc_temp.txt
数値合計.awk
# 数値合計.awk(外変1・原点リセット最小版)? 0°固定・末尾に「"」が付かない(全文)
# 目的: cs/# の数値も合算し、通常文字(ch)で合計を出力。角度は常に 0°。
# 本文は数値のみ。本文中の余分なクォートは除去。
BEGIN{
SUM=0; CX=CY=""; FH="";
DXR=0.00; DYR=0.00; ABS_DX=0; ABS_DY=0; # 既存のまま(位置計算は /10)
}
function z2h(s, i,c,from,to){
from="0123456789.−+,"; to="0123456789.-+,";
for(i=1;i<=length(from);i++){ c=substr(from,i,1); gsub(c, substr(to,i,1), s) }
gsub(/,/, "", s);
return s;
}
function add_nums(t, s,m){
s=z2h(t);
while (match(s,/[-+]?[0-9]+(\.[0-9]+)?/)){
m=substr(s,RSTART,RLENGTH)+0;
SUM+=m;
s=substr(s,RSTART+RLENGTH);
}
}
function trim_zeros(s){
gsub(/\.?0+$/,"",s);
return (s=="" ? "0" : s);
}
function sanitize_text(s){
# 本文中に混入したクォート類を除去(表示末尾に " が出ないようにする)
gsub(/["”“〃″????W]/, "", s);
return s;
}
# クリック座標 (先頭 0 行)
/^[ \t]*0[ \t]+/{
n=split($0,a,/[ \t]+/);
if(n>=3){ CX=a[2]; CY=a[3]; }
}
# ch 行: 高さ FH を取得、本文の数値を加算(角度は読まない)
/^[ \t]*ch[ \t]+/{
if(FH==""){
n=split($0,a,/[ \t]+/);
if(n>=4) FH=a[4];
}
q=index($0,"\"");
if(q>0) add_nums(substr($0,q+1));
}
# cs 行(" あり/なし 両対応)
/^[ \t]*cs[ \t]+/{
q=index($0,"\"");
if(q>0){
add_nums(substr($0,q+1));
} else if ($NF ~ /^[-+]?[0-9]+(\.[0-9]+)?$/){
add_nums($NF);
}
}
# ベクトル文字の本文が "# " の場合
/^# /{
if(length($0)>=3) add_nums(substr($0,3));
}
END{
# フォールバック
if(CX=="" || CY==""){ CX=100; CY=100; }
if(FH=="") FH=600;
# 合計の本文(数値のみ)→ クォート類を除去
sumstr = trim_zeros(sprintf("%.6f", SUM+0));
if(sumstr=="") sumstr="0";
sumstr = sanitize_text(sumstr);
# 配置(/10)
px = CX / 10 + ABS_DX;
py = CY / 10 + ABS_DY;
# 出力:角度は常に 0° 固定。※ "%s" は必ず閉じクォート付き(\"%s\"\n)
print "bz";
printf("ch %.6f %.6f %.0f 0 \"%s\"\n", px, py, FH, sumstr);
}