こんにちは!はこです。
AutoLISPを独学し、5年以上業務で使用しています。
今回の記事ではAutoLISPのデータ型変換関数について解説していきます。
AutoLISPは型宣言を必要としないプログラミング言語ですが、関数によっては引数の型が決められているのものもあります。このような関数を使用する場合はあらかじめデータ型を変換してあげることで、余計なプログラムの記述を省くことが可能です。
今までは扱えなかったデータが型変換によって扱えるようになればAutoLISPのスキルアップにつながります。AutoCADをAutoLISPで効率化した方はぜひご覧ください。
データ型を変換しよう!AutoLISPのデータ型変換関数を解説
今回ご紹介するデータの型変換を行う関数が次の6つです。
関数 | 内容 |
---|---|
angtos | 角度を数値の文字列に変換して返す |
ascii | 文字に対応するアスキーコードを返す |
chr | アスキーコードに対応する文字を返す |
fix | 数値の整数部分を返す |
float | 整数を実数の形式で返す |
read | 文字列をシンボルに変換して返す |
文字列を数値に変換する、数値を文字列に変換する関数を知りたい方はこちらの記事をご覧ください。
関連記事:【itoa】文字列を使いこなそう!AutoLISPの文字列関数を解説
それでは順番に解説していきます。
角度を数値の文字列に変換:angtos
angtosの特徴は?
- 角度を文字列形式に変換できる
- 設定によって返り値の単位と精度を変更できる
angtosは角度を数値の文字列に変換して返す関数です。オプションの設定によって返り値の単位と精度を変更することができます。引数の角度はラジアン単位で処理されるので注意してください。
angtosの使い方は?
- 構文
(angtos 角度 [単位 [精度]])
- 引数
角度
文字列に変換したいラジアン単位の実数を指定します。負の値も指定できます。
単位
返り値の単位を設定する整数を指定します。省略可能で、その場合はシステム変数AUNITSに従います。設定できる整数と単位の対応は次のとおりです。
0:十進数(度)
1:度/分/秒
2:グラジエント
3:ラジアン
4:測量用単位
精度
返り値の小数点以下の桁数を設定する整数を指定します。省略可能で、その場合はシステム変数AUPRECに従います。
- 返り値
文字列
設定に従った角度の文字列が返ります。負の値の角度を記述した場合は0~2πの範囲で変換されます。
nil
変換に失敗した場合はnilが返ります。
ちなみに、AUNITSは角度の単位を設定するシステム変数です。
AUPRECは座標の表示精度を設定します。
;角度を文字列に変換する。(10進数で小数点以下3桁)
(setq ang 1.5)
(angtos ang 0 3)
⇒ "85.944"
文字をアスキーコードに変換:ascii
asciiの特徴は?
- 文字をアスキーコード(整数)に変換できる
- 変換されるのは先頭の半角1文字のみ
asciiは引数の半角文字に対応するアスキーコードを返す関数です。複数の文字(文字列)を引数とした場合、変換されるのは先頭の半角1文字のみです。
アスキーコードって何?
アスキー(ASCII)コードは次のよう定義されています。
ASCIIとは、アルファベットや数字、記号などを収録した文字コードの一つ。最も基本的な文字コードとして世界的に普及しており、他の多くの文字コードがASCIIの拡張になるよう実装されている。文字を7ビットの値(0~127)で表し、128文字が収録されている。
ASCII(アスキーコード)とは - IT用語辞典 e-Words
アスキーコードを簡単にいうと半角文字それぞれに割り当てられた整数のことで、整数だけで文字列を表現することが可能です。0~127はアルファベットなど割り当てられております。日本語の場合、拡張領域である128~255までの範囲には半角カタカナや句読点などが限定的に割り当てられています。
asciiの使い方は?
- 構文
(ascii 文字)
- 引数
文字
アスキーコードに変換したい文字列を指定します。複数の文字(文字列)を指定した場合は先頭の1文字が変換されます。
- 返り値
整数
文字に対応するアスキーコードが返ります。
;文字をアスキーコードに変換する
(setq str "a")
(ascii str)
⇒ 97
(setq str "autolisp")
(ascii str)
⇒ 97
アスキーコードを文字に変換:chr
chrの特徴は?
- アスキーコード(整数)を文字に変換できる
chrは前述したアスキーコードに対応する文字を返す関数です。0~255の整数を指定することができますが、256以上のときは256で割ったあまりが引数となり対応する文字が返ります。
chrの使い方は?
- 構文
(chr アスキーコード)
- 引数
アスキーコード
0~255のアスキーコード(整数)を指定します。256以上の場合は256で割ったあまりが引数となります。
- 返り値
文字
アスキーコードに対応する文字が返ります。
;アスキーコードを文字に変換する
(setq asc 97)
(chr asc)
⇒ "a"
(setq asc 65)
(chr asc)
⇒ "A"
実数を整数に変換:fix
fixの特徴は?
- 実数(数値)の整数部分を取得できる
fixは引数に指定した数値の整数部分を返す関数です。引数が整数のときはその整数がそのまま返ります。小数点以下は切り捨てられ、四捨五入もしないので注意してください。
fixの使い方は?
- 構文
(fix 実数)
- 引数
実数
整数部分を取得したい実数を指定します。
- 返り値
整数
引数に記述した実数の整数部分が返ります。引数が整数の場合はその整数をそのまま返します。
;算出した実数を整数に変換する
(setq a 10.5)
(setq b 2.3)
(fix (* a b))
⇒ 24
整数を実数に変換:float
floatの特徴は?
- 整数(数値)を実数に変換できる
floatは引数の数値に小数点以下を付加して実数の形式で返す関数です。実数が引数の場合はその実数がそのまま返ります。
floatの使い方は?
- 構文
(float 整数)
- 引数
整数
実数に変換したい整数を指定します。
- 返り値
実数
引数の整数に小数点以下を付加した実数が返ります。引数が実数の場合はその実数をそのまま返します。
;整数を実数に変換する
(setq a 10)
(float a)
⇒ 10.0
文字列をシンボルに変換:read
readの特徴は?
- 文字列をシンボル(記号)に変換できる
readは引数の文字列をシンボルに変換して返す関数です。引数に区切り文字(空白、改行、タブ、括弧など)が含まれている場合は分割された先頭の文字列のみシンボル化されます。
シンボルって何?
シンボルとは関数に引数として渡しても評価されないデータのことです。変数や文字列ではなく、ただの記号として扱われます。ちなみにシンボルはevalという関数で強制的に評価することもできます。
readの使い方は?
- 構文
(read 文字列)
- 引数
文字列
シンボル化したい文字列を指定します。
- 返り値
シンボル
引数の文字列を対応するデータに変換して返します。区切り文字(空白、改行、タブ、括弧など)が引数に含まれている場合分割された先頭の文字列が変換されます。引数と変換されるデータの対応は次のとおりです。
通常の文字列 ⇒ 評価されない文字列(記号)
数値の文字列 ⇒ 数値
関数名の文字列 ⇒ 関数
リストの文字列 ⇒ リスト
nil
引数が省略されている場合はnilが返ります。
;変数名の文字列をシンボル化して、その変数を強制的に評価する
(setq hako 100)
(eval (read "hako"))
⇒ 100
上記の例ではhakoというシンボルをevalで強制的に評価しているので、変数に格納されている数値の100が最後に返ります。
まとめ
今回はAutoLISPのデータ型変換関数について解説してきました。関数によっては引数の型が指定されている場合があるのでこれらの関数を組み合わせることでプログラムをシンプルにすることができます。
関数 | 内容 | 構文 |
---|---|---|
angtos | 角度を数値の文字列に変換して返す | (angtos 角度 [単位 [精度]]) |
ascii | 文字に対応するアスキーコードを返す | (ascii 文字) |
chr | アスキーコードに対応する文字を返す | (chr アスキーコード) |
fix | 数値の整数部分を返す | (fix 実数) |
float | 整数を実数の形式で返す | (float 整数) |
read | 文字列をシンボルに変換して返す | (read 文字列) |
AutoLISPをより理解しやすくするために他のプログラミング言語を覚えることをおすすめします。こちらの記事ではおすすめのオンラインプログラミングスクールを紹介していますのでよろしければご覧ください。
学習目的別にご紹介!おすすめオンラインプログラミングスクール3選
無料体験もできるプログラミングスクールです!