Sponsored links

【AutoLISP リスト】文字列からリストを作成

Sponsored links
crop laboratory technician examining interaction of chemicals in practical test modern lab AutoLISP
Photo by RF._.studio on Pexels.com
Sponsored links

文字列 “JagaimoLISP” から リスト (“J” “a” “g” “a” “i” “m” “o” “L” “I” “S” “P”) を作成します。

Sponsored links

予備知識

リストって何?という方はまずはコチラの記事を。

リストに要素を加える関数 cons 、リストの順番を逆にする reverse について。

文字列を部分的にする関数 substr について

文字列からリストに作成

文字列 “JagaimoLISP”から1文字づつ取り出してリストにしていきます。
まずはコマンドラインに入力しながら、一つ一つ動きを見ていきましょう。

setq で変数 Tx に 文字列 “JagaimoLISP” を代入します。

(setq Tx "JagaimoLISP")

この”JagaimoLISP” から最初の1文字目 “J”だけを得るには、関数 substr を使います。
substr の引数は開始位置と最終位置です。この場合、最初の一文字なので、開始も終わりも1です。

(substr TX 1 1)

これで”J” が戻り値になります。
この文字列を 関数 cons を使ってリストに足します。ここで使うリストは 変数 Lst に代入します。

関数 cons に必要な引数は足したい要素とリスト です。
要素は先ほどの (substr TX 1 1)、リストは 変数 Lst です。

最初の文字を足す時には、変数 Lstは何も入っていない nil ですが、nilの場合はリストが作成されます。

(setq Lst (cons (substr TX 1 1) Lst))

これで、(“J”) というリストが 変数 Lst に代入されました。

変数の値を確認したい場合、コマンドラインに !Lst と入力すれば確認できます。

!Lst

1文字目をリストに入れることができたので、Txに入れた文字列から消します。
関数 substr は最終位置を省略すると最後までになります。
開始位置2、最終位置省略にすると、2文字目から最後まで(1文字目を省いた文字列)が戻り値になります。

(setq Tx (substr Tx 2))

これで、変数 Tx に代入された文字列が “gaimoLISP” になりました。

この流れを繰り返すことで、1文字づつバラバラにリストに加えることができます。

(repeat (strlen Tx) ………………) で文字列の文字数繰り返すプログラムができます。

関数 repeat は引数の数だけ繰り返す関数です。
関数 strlen は文字列の文字数を得る関数です。

しかし、この方法で文字列を足していくと、最初に入れた要素がリストの最後になり
(“P” “S” “I” “L” “o” “m” “i” “a” “g” “a” “J”)
というリストになってしまうので、関数 reverse を使って最後に順番を逆にします。

AutoLISPプログラム

上記の流れを一つのコマンドにまとめました。

コマンド名はtest。
文字列をバラバラにしてリスト作成する例のためだけのコマンドなので、単に
(“J” “a” “g” “a” “i” “m” “o” “L” “I” “S” “P”)
とコマンドラインに出てくるだけです。

(defun c:test ( / Tx Lst)
  
 (setq Tx "JagaimoLISP")
  
    (repeat (strlen Tx)
      (setq Lst (cons (substr TX 1 1) Lst))
      (setq Tx (substr Tx 2))
    );repeat
  
  (setq Lst (reverse Lst))
  
);defun

まとめ

  • 関数 substrで文字列を部分的にして、関数consでリストに足していくことで、文字列をバラバラにしたリストを作成できる。

関連記事

Comments