Indexへ
(21138)//【21075】→(21082)
------------------------
【タイトル】外変による座標の読み取りについて
【記事番号】 21075 (*)
【 日時 】04/08/30 09:12
【 発言者 】先発敗戦処理

みなさんこんにちは!
ちょっと知恵を貸していただけないでしょうか?

外部変形を使って座標値を読み取ったときにJWC.tempファイルに

247.217817712004 1.06581410364015e-012 -252.782182287996 1.06581410364015e-012 (線分のデータの一例です)

といったようにe-12といったような指数?で読み取ってしまいます。
これを簡単な整数で座標値を読み取ったりすることは出来ないもんでしょうか?

もしくは指数?を正しく外部プログラム上で整数に変換するにはどのようにコーディングすれば良いのでしょうか?
できればVBで教えてもらえるとありがたいです。
どなたかご存知でしたら教えてください。


Indexへ
(21075)←【21082】→(21083)
------------------------
【タイトル】Re(1):外変による座標の読み取りについて
【記事番号】 21082 (21075)
【 日時 】04/08/30 10:46
【 発言者 】コジマ

>これを簡単な整数で座標値を読み取ったりすることは出来ないもんでしょうか?
>
>もしくは指数?を正しく外部プログラム上で整数に変換するにはどのようにコーディングすれば良いのでしょうか?
>できればVBで教えてもらえるとありがたいです。
>どなたかご存知でしたら教えてください。

VBのことは、分かりませんが、理論は一緒なので、Ruby で説明します。

while ARGF.gets  #temp.txtの一行ずつの読み込み開始
xy = split    #一行の読込データを分割して、xyという配列にする。
if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/  #もしも、線データならば
xy.collect!{|item| if item.to_f}    #配列内のデータを浮動小数点数に変                     換する

整数に変換するには、xy.collect!{|item| if item.to_i}

VBの文法、メソッドの置き換えればよろしいかと思います。

以下は、図面内に座標一覧表を作図する外変です。

○バッチファイル

@REM 線端・点に座標値(mm単位)を記入+一覧表。
@echo off
REM #jww
REM #cd
REM #h1
REM #1一覧表記入点を指示してください。
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 座標記入一覧.rb temp.txt > jwc_temp.txt


○スクリプトファイル(ファイル名 座標記入一覧.rb)

# 線端に座標値を記入+一覧表。
BEGIN{
$zahyo=Array.new
$x1=Array.new
$x2=Array.new
$y1=Array.new
$y2=Array.new
$by=Array.new
$gyo=6
}
def main
while ARGF.gets
xy = split
if xy[0] =~ /^hs/
b=1
while (b$by.push(xy[b].to_i)
b +=1
end
end
if xy[0] =~ /^lg/
$lg=(xy[0].delete("lg")).to_i
end
if xy[0] =~ /^hp1/
ax=xy[1].to_f
ay=xy[2].to_f
end
if xy[0] =~ /^[0-9]/ or xy[0] =~ /^-/
xy.collect!{|item| if item=~ /^0/
           item=0
          else
           (((item.to_f)*1000).round)/1000.to_f
          end}
xy.collect!{|item| if item.to_s=~ /.0$/
           item=item.round
          else
           item=item
          end}
zahyo1=xy[0].to_s+","+xy[1].to_s
zahyo2=xy[2].to_s+","+xy[3].to_s
$zahyo.push(zahyo1)
$zahyo.push(zahyo2)
$x1.push(xy[0])
$x2.push(xy[2])
$y1.push(xy[1])
$y2.push(xy[3])
end
end
$zahyo.uniq!
n=0
while (n<$zahyo.size)
$xy=$zahyo[n].split(",")
x=$xy[0].to_f
y=$xy[1].to_f
printf("ch %e %e %e %e \"%s\n", x, y, 1, 0,$zahyo[n])
n+=1
end
if $zahyo.include?("0,0")==false
printf("ch %e %e %e %e \"0,0\n", 0, 0, 1, 0)
printf("pt %e %e \n", 0, 0)
end
$zusun=$by[$lg]

yokosen(ax,ax+100*$zusun,ay+$gyo*$zusun)
yokosen(ax,ax+100*$zusun,ay)
m=0
while (m<=$x1.size-1)
yokosen(ax,ax+100*$zusun,ay-$gyo*(m+1)*$zusun)
printf("ch %e %e %e %e \"%s\n",
ax+1*$zusun,ay-($gyo*(m+1)-1)*$zusun, 1, 0,$x1[m])
printf("ch %e %e %e %e \"%s\n",
ax+26*$zusun,ay-($gyo*(m+1)-1)*$zusun, 1, 0,$y1[m])
printf("ch %e %e %e %e \"%s\n",
ax+51*$zusun,ay-($gyo*(m+1)-1)*$zusun, 1, 0,$x2[m])
printf("ch %e %e %e %e \"%s\n",
ax+76*$zusun,ay-($gyo*(m+1)-1)*$zusun, 1, 0,$y2[m])
m+=1
end
tatesen(ay+$gyo*$zusun,ay-($gyo*$x1.size)*$zusun,ax)
tatesen(ay+$gyo*$zusun,ay-($gyo*$x1.size)*$zusun,ax+25*$zusun)
tatesen(ay+$gyo*$zusun,ay-($gyo*$x1.size)*$zusun,ax+50*$zusun)
tatesen(ay+$gyo*$zusun,ay-($gyo*$x1.size)*$zusun,ax+75*$zusun)
tatesen(ay+$gyo*$zusun,ay-($gyo*$x1.size)*$zusun,ax+100*$zusun)

printf("ch %e %e %e %e \"x1\n",ax+10*$zusun, ay+1*$zusun, 1, 0)
printf("ch %e %e %e %e \"y1\n",ax+35*$zusun, ay+1*$zusun, 1, 0)
printf("ch %e %e %e %e \"x2\n",ax+60*$zusun, ay+1*$zusun, 1, 0)
printf("ch %e %e %e %e \"y2\n",ax+85*$zusun, ay+1*$zusun, 1, 0)
end
def naname(x1,y1,x2,y2)
printf("%e %e %e %e\n", x1, y1, x2, y2)
end
def tatesen(y1,y2,x1)
printf("%e %e %e %e\n", x1, y1, x1, y2)
end
def yokosen(x1,x2,y1)
printf("%e %e %e %e\n", x1, y1, x2, y1)
end
main()


Indexへ
(21082)←【21083】//(21076)
------------------------
【タイトル】Re(1):外変による座標の読み取りについて
【記事番号】 21083 (21075)
【 日時 】04/08/30 11:24
【 発言者 】牛渡
【 リンク 】http://www61.tok2.com/home2/gravelroad/



>といったようにe-12といったような指数?で読み取ってしまいます。
>これを簡単な整数で座標値を読み取ったりすることは出来ないもんでしょうか?

指数表記の文字列から倍精度型変数に変換するには CDbl 関数を利用すれば
よいかと思います。
整数に丸める際には、小数1位を四捨五入にするのか、切捨てにするのかによって
処理が違ってくると思いますので、整数化したときの結果をよく検討してくだ
さい。
切捨ても、INT 関数と FLOOR 関数では、マイナス数値に対する振舞いが違って
いますので注意が必要です。 ROUND / ROUNDUP / ROUNDDOWN 関数もありますので
ヘルプをよく読んで選択してください。