文字列は、一連の文字をダブル クォーテーションで囲んだものです。円記号(¥)と組み合わせることにより、ダブル クォーテーションで囲んだ文字列の中に制御文字(エスケープ コード)を含めることができます。
AutoLISP で明示的にダブル クォーテーションで囲んだ文字列を使用すると、その値はリテラル文字列、つまり文字列定数として認識されます。
正しい文字列の例は、"string 1"、"¥nEnter first point:" です。
AutoLISP には、文字列値を処理するための関数が多数あります。次に、最も一般的に使用される機能の一部を紹介します。
文字列のアルファベット文字は、strcase 関数を使用して、大文字または小文字に変換することができます。この関数には 2 つの引数を指定します。文字列と、文字を大文字で返すか小文字で返すかを指定するオプションの引数です。2 番目の引数を指定しないと、その引数は nil に評価され、strcase は大文字に変換された文字列を返します。
(strcase "This is a TEST.") "THIS IS A TEST."
2 番目の引数 T を指定すると、文字は小文字として返されます。
(strcase "This is a TEST." T) "this is a test."
strcat 関数を使用して、複数の文字列を 1 つの文字列値に結合することができます。これは、エラー メッセージや図面内の注記など、定数文字列の中に変数文字列を挿入するときに便利です。次のコード例は、変数に文字列値を代入し、次に strcat を使用して、その文字列を 2 つの他の文字列間に挿入しています。
(setq str "BIG") (setq bigstr (strcat "This is a " str " test.")) "This is a BIG test."
substr 関数を使用すると、文字列の一部を返すことができます。この関数には、2 つの必須引数と 1 つの省略可能な引数があります。最初の引数は文字列で、2 番目の引数は部分文字列として返される文字列の開始文字を表す整数です。3 番目の引数を指定しないと、substr は指定した開始文字以降のすべての文字を返します。
(substr "Welcome to AutoLISP" 12) "AutoLISP"
返される文字の数を表す 3 番目の引数に対して整数を指定することにより、substr 関数に渡す文字列の先頭または途中の部分文字列を返すことができます。たとえば次のサンプル コードは、指定した文字列の最初の 7 文字を返します。
(substr "Welcome to AutoLISP" 1 7) "Welcome"
文字列を使用しているとき、文字列の長さは分からないが、返す部分文字列の開始位置が分かっているということがよくあります。strlen 関数は、文字列の文字数(スペースを含む)を返します。
(setq filnam "bigfile.txt") (strlen filnam) 11
次のサンプル コードは、末尾の 4 文字(ピリオドと 3 文字の拡張子)を除いたファイル名のすべての文字を返します。これは、strlen を使用して文字列の長さを求め、その値から 4 を引くことによって行っています。次に、substr を使用して、部分文字列の先頭の文字とその長さを指定します。
(setq newlen (- (strlen filnam) 4)) 7 (substr filnam 1 newlen) "bigfile"
他の関数のために newlen 変数に格納した文字列の長さが必要なければ、コードの前の 2 行を 1 行に結合することができます。
(substr filnam 1 (- (strlen filnam) 4)) "bigfile"
語句の検索と置換は、注記や部品番号の更新に役立ちます。vl-string-search 関数を使用すると、文字列内でパターンを検索し、指定したパターンの最初のインスタンスの開始位置を整数として返すことができます。関数が整数を返した場合、次にその値を他の検索の開始位置として使用することにより、文字列内のパターンの複数のインスタンスを確実に検索できます。
vl-string-subst 関数を使用して、文字列内の語句を置換することができます。vl-string-search 関数と同様に、この関数が識別できるのは、指定したパターンの最初のインスタンスのみです。語句を置換した後に vl-string-search 関数を使用して、vl-string-subst が返した文字列内にパターンの他のインスタンスが含まれていないかどうかを確認することができます。
次のコード例は、文字列内で語句 WIDTH を検索して置換します。
(setq note "All door openings are [WIDTH] unless otherwise noted.") "All door openings are [WIDTH] unless otherwise noted." (setq position (vl-string-search "[WIDTH]" note)) 22 (setq revised-note (vl-string-subst "36\"" "[WIDTH]" note position)) "All door openings are 36\" unless otherwise noted." (prompt revised-note)(princ) All door openings are 36" unless otherwise noted.