概要 - 文字列の変換(AutoLISP)

出力または文字データで使用するために、数値を文字列値に変換することができます。

次の関数を使用して、実数と角度値を文字列に変換したり、この逆の変換を行うことができます。

実数を長さの単位形式を使用する文字列に変換する

rtos 関数は、実数値を文字列に変換します。結果の文字列の書式は、この関数の引数を使用して指定できます。引数を使用しない場合は、AutoCAD のシステム変数 LUNITS と LUPREC で指定することができます。結果の文字列の先頭と末尾に 0 (ゼロ)を書き込むかどうかは、AutoCAD のシステム変数 DIMZIN でコントロールします。

次のコード例では、rtos の使用方法と、返される値を示します(AutoCAD のシステム変数 DIMZIN は 0 と仮定)。精度(rtos への 3 番目の引数)は、最初の呼び出しでは 4 桁に設定され、それ以外では 2 桁に設定しています。

(setq x 17.5)
(setq str "\nValue formatted as ")

(setq fmtval (rtos x 1 4)) ; Mode 1 = scientific
(princ (strcat str fmtval))
Value formatted as 1.7500E+01

(setq fmtval (rtos x 2 2)) ; Mode 2 = decimal
(princ (strcat str fmtval))
Value formatted as 17.50

(setq fmtval (rtos x 3 2)) ; Mode 3 = engineering
(princ (strcat str fmtval))
Value formatted as 1'-5.50"

(setq fmtval (rtos x 4 2)) ; Mode 4 = architectural
(princ (strcat str fmtval))
Value formatted as 1'-5 1/2"

(setq fmtval (rtos x 5 2)) ; Mode 5 = fractional
(princ (strcat str fmtval))
Value formatted as 17 ½

AutoCAD のシステム変数 UNITMODE が 1 に設定されている場合、単位は入力したとおりに表示されます。rtos によって返される文字列の単位は、工業図面表記(モード = 3)、建築図面表記(モード = 4)、分数表記(モード = 5)によって異なります。たとえば、上記のサンプル出力の上の 2 つは同じになりますが、下の 3 つは次のようになります。

Value formatted as 1'5.50"
Value formatted as 1'5-1/2"
Value formatted as 17-1/2''

長さの単位形式を使用する文字列を実数に変換する

distof 関数(距離を浮動小数点に変換)は rtos と反対の働きをします。次の呼び出しは、すべて同じ値 17.5 を返します。(モード 3 と 4 で円記号(¥)を使用している点に注意してください)。

(distof "1.7500E+01" 1) ; Mode 1 = scientific
(distof "17.50" 2)      ; Mode 2 = decimal
(distof "1'-5.50\"" 3)  ; Mode 3 = engineering
(distof "1'-5 1/2\"" 4) ; Mode 4 = architectural
(distof "17 1/2" 5)     ; Mode 5 = fractional

フィートとインチで距離を指定する文字列の場合は、文字列の終わりと解釈されないように、クォーテーションの前に円記号( ¥" )を付ける必要があります。distof 関数の前述の例でこれを示しています。

実数を角度の単位形式を使用する文字列に変換する

angtos 関数は、角度値を文字列に変換します。結果の文字列の書式は、この関数の引数を使用して指定できます。引数を使用しない場合は、AutoCAD のシステム変数 AUPREC と LUPREC で指定することができます。結果の文字列の先頭と末尾に 0 (ゼロ)を書き込むかどうかは、AutoCAD のシステム変数 DIMZIN でコントロールします。

angtos 関数は AutoCAD のシステム変数 ANGBASE の影響を受けるため、次のコード例は必ず "0" を返します。

(angtos (getvar "angbase"))

AutoLISP には、真のゼロ(東)からの ANGBASE の回転量や任意の角度(ラジアン)を文字列形式(現在のモード/精度を反映)で返す関数はありません。

AutoCAD のゼロ(東)からの ANGBASE の回転量を取得したり、任意の角度の大きさを取得する方法は、次のいずれかの操作を行うことで見つけることができます。

360 度(2π ラジアンまたは 400 グラジエント)から (atof (angtos 0)) の結果を引くことによっても、0(ゼロ)からの ANGBASE の回転量が得られます。

次のコード例では、angtos 関数の使用方法と、返される値を示します(ここでもシステム変数 DIMZIN は 0 と仮定)。精度(angtos への 3 番目の引数)は、最初の呼び出しでは 0(ゼロ)桁、次の 3 つの呼び出しでは 4 桁、そして最後の呼び出しでは 2 桁に設定されています。

(setq ang 3.14159 str2 "\nAngle formatted as ")
(setq fmtval (angtos ang 0 0)) ; Mode 0 = degrees
(princ (strcat str2 fmtval))
Angle formatted as 180

(setq fmtval (angtos ang 1 4)) ; Mode 1 = deg/min/sec
(princ (strcat str2 fmtval))
Angle formatted as 180d0'0"

(setq fmtval (angtos ang 2 4)) ; Mode 2 = grads
(princ (strcat str2 fmtval)) ; displays Angle formatted as
200.0000g

(setq fmtval (angtos ang 3 4)) ; Mode 3 = radians
(princ (strcat str2 fmtval))
Angle formatted as 3.1416r

(setq fmtval (angtos ang 4 2)) ; Mode 4 = surveyor's
(princ (strcat str2 fmtval))
Angle formatted as W

システム変数 UNITMODE は、angtos が測量用単位(モード = 4)の文字列を返すとき、この文字列にも影響します。UNITMODE が 0(ゼロ)の場合、返される文字列に空白が入ることがあります(たとえば "N 45d E")。UNITMODE が 1 の場合、文字列に空白は含まれません(たとえば "N45dE")。

角度の単位形式を使用する文字列を実数に変換する

angtofangtos と反対の働きをする関数なので、次の呼び出しはすべて同じ値、3.14159 を返します。

(angtof "180" 0)       ; Mode 0 = degrees
(angtof "180d0'0\"" 1) ; Mode 1 = deg/min/sec
(angtof "200.0000g" 2) ; Mode 2 = grads
(angtof "3.14159r" 3)  ; Mode 3 = radians
(angtof "W" 4)         ; Mode 4 = surveyor's

度、分、秒単位で角度を指定する文字列の場合は、文字列の終わりと解釈されないようにクォーテーション マークの前に円記号を付けてる必要があります( ¥" )。angtof 関数の前述の例でこの操作を示しています。