[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

79. stringproc


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

79.1 Introduction to string processing

stringproc.lispは、 Maximaの文字列を扱う機能を拡大し、 ファイル入出力に関するいくつかの役立つ関数を追加します。

質問とバグに関しては、volkervannek at gmail dot comにメールしてください。

Maximaでは、文字列は "text"とタイプすることで簡単に構成することができます。 stringpは文字列かテストします。

 
(%i1) m: "text";
(%o1)                         text
(%i2) stringp(m);
(%o2)                         true

文字は長さ 1の文字列として表されます。 これらは Lisp文字ではありません。 テストは charpで行うことができます。 (関連として、lcharpcunlispを使った Lisp文字から Maxima文字への変換)

 
(%i1) c: "e";
(%o1)                           e
(%i2) [charp(c),lcharp(c)];
(%o2)                     [true, false]
(%i3) supcase(c);
(%o3)                           E
(%i4) charp(%);
(%o4)                         true

stringproc.lispの中の文字を返す関数はすべて Maxima文字を返します。 導入された文字が長さ 1の文字列だという事実のおかげで、たくさんの文字列関数を文字にも使うことができます。 既に見たように supcaseは1例です。

Maxima文字列の最初の文字は位置 1にあることを知ることは重要です。 これは、 Maximaリストの中の最初の要素も位置 1にあるという事実によって設計されています。 例えば、 charatcharlistの定義を見てください。

応用として、文字列関数はしばしばファイルを扱う時に使われます。 stringproc.lispの中に役立つストリーム関数、印字関数を見つけるでしょう。 以下の例はここで導入された関数のいくつかがいかに働くか示します。

例:

openwはファイルへの出力ストリームを返し、 printfはこのファイルへのフォーマットされた書き込みを可能にします。 詳細は printfを参照してください。

 
(%i1) s: openw("E:/file.txt");
(%o1)                    #<output stream E:/file.txt>
(%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) );
(%o2)                                done
(%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%", 
              42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );
(%o3)                                false
(%i4) close(s);
(%o4)                                true

ストリームを閉じた後、今度は入力方向で再び開くことができます。 readlineは行全体を1つの文字列として返します。 現在、 stringprocパッケージは文字列を操作するたくさんの関数を提供しています。 splittokensでトークン化できます。

 
(%i5) s: openr("E:/file.txt");
(%o5)                     #<input stream E:/file.txt>
(%i6) readline(s);
(%o6)                     0 1 1 2 3 5 8 13 21 34 55 
(%i7) line: readline(s);
(%o7)               42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
(%i8) list: tokens(line);
(%o8)           [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
(%i9) map( parse_string, list );
(%o9)            [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
(%i10) float(%);
(%o10) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01,
                                                     0.01, 0.01]
(%i11) readline(s);
(%o11)                               false
(%i12) close(s)$

ファイルの終わりに来ると、 readlinefalseを返します。

·

Categories:  Strings ·Share packages ·Package stringproc


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

79.2 Functions and Variables for input and output

例:

 
(%i1) s: openw("E:/file.txt");
(%o1)                     #<output stream E:/file.txt>
(%i2) control: 
"~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2t\
and an integer: ~20t~d~%"$
(%i3) printf( s,control, 'true,[1,2,3],42 )$
(%o3)                                false
(%i4) close(s);
(%o4)                                true
(%i5) s: openr("E:/file.txt");
(%o5)                     #<input stream E:/file.txt>
(%i6) while stringp( tmp:readline(s) ) do print(tmp)$
  An atom:          true 
  and a list:       one two three  
  and an integer:   42 
(%i7) close(s)$

関数: close (stream)

streamを閉じて、もし streamが開いていたら trueを返します。

関数: flength (stream)

streamの中の要素の数を返します。 ここで streamはファイルからかファイルへのストリームでなければいけません。

関数: fposition (stream)
関数: fposition (stream, pos)

もし posが使われてないなら、 streamの中の現在位置を返します。 もし posが使われているなら、 fpositionstreamの中の位置を設定します。 posは正の数でなければいけません。 ここで streamの最初の要素は位置 1にあります。

関数: freshline ()
関数: freshline (stream)

もし位置が行の最初でないなら (streamに)改行を書きます。 newlineも参照してください。

·

Categories:  File output ·Package stringproc

関数: get_output_stream_string (stream)

現在 streamに存在するすべての文字を含む文字列を返します。 streamはオープンな文字列出力ストリームでなければいけません。 戻り値の文字は streamから取り除かれます。

例: make_string_output_streamを参照してください。

·

Categories:  Package stringproc

関数: make_string_input_stream (string)
関数: make_string_input_stream (string, start)
関数: make_string_input_stream (string, start, end)

stringの一部とファイルの終了を含む入力ストリームを返します。 オプション引数がない場合、ストリームは全体の文字列を含み、一番目の文字の前に位置されます。 startendはストリームに含まれた部分文字列を定義します。 一番目の文字は位置 1で得られます。

 
(%i1) istream : make_string_input_stream("text", 1, 4);
(%o1)              #<string-input stream from "text">
(%i2) (while (c : readchar(istream)) # false do sprint(c), newline())$
t e x 
(%i3) close(istream)$
·

Categories:  Package stringproc

関数: make_string_output_stream ()

文字を受け付ける出力ストリームを返します。 このストリームに現在存在する文字は get_output_stream_stringを使って取り出すことができます。

 
(%i1) ostream : make_string_output_stream();
(%o1)               #<string-output stream 09622ea0>
(%i2) printf(ostream, "foo")$

(%i3) printf(ostream, "bar")$

(%i4) string : get_output_stream_string(ostream);
(%o4)                            foobar
(%i5) printf(ostream, "baz")$

(%i6) string : get_output_stream_string(ostream);
(%o6)                              baz
(%i7) close(ostream)$
·

Categories:  Package stringproc

関数: newline ()
関数: newline (stream)

(streamに)改行を書きます。 newline()の使用の例に関しては、 sprintを参照してください。 newline()が期待通りに動かない いくつかの場合があることに注意してください。

·

Categories:  File output ·Package stringproc

関数: opena (file)

fileへの出力ストリームを返します。 もし存在しているファイルを開いたら、 openaはファイルの終わりに要素を追加します。

·

Categories:  File output ·Package stringproc

関数: openr (file)

fileへの入力ストリームを返します。 もし fileが存在しないなら、生成されます。

·

Categories:  File input ·Package stringproc

関数: openw (file)

fileへの出力ストリームを返します。 もし fileが存在しないなら、生成されます。 もし存在しているファイルを開いたら、 openwfileを破壊的に変更します。

·

Categories:  File output ·Package stringproc

関数: printf (dest, string)
関数: printf (dest, string, expr_1, ..., expr_n)

制御文字列 stringの文字を出力し、ティルデがディレクティブを導入することを観察することで フォーマットされた出力を生成します。 ティルデの後の文字は、前置パラメータと修飾子が先立つこともありますが、どの種類のフォーマットが望まれているか指定します。 ほとんどのディレクティブは1つか複数の要素の引数 expr_1, ..., expr_nを使い、出力を生成します。

もし destがストリームか trueなら、 printffalseを返します。 そうでなければ、 printfは出力を含む文字列を返します。

printfは Maximaの Common Lisp 関数 formatを提供します。 以下の例はこれら二つの関数の一般的な関係を具体的に示します。

 
(%i1) printf(true, "R~dD~d~%", 2, 2);
R2D2
(%o1)                                false
(%i2) :lisp (format t "R~dD~d~%" 2 2)
R2D2
NIL

以下の記述は printfの可能性の雑なスケッチに限定されます。

Lisp関数 formatは詳細は多くの参考書籍に記述されています。 例えば、 Guy L. Steeleによる無料のオンラインマニュアル "Common Lisp the Language"が役立つでしょう。 それの chapter 22.3.3を参照してください。

 
   ~%       改行
   ~&       行のフレッシュ
   ~t       タブ
   ~$       通貨記号
   ~d       10進整数
   ~b       2進整数
   ~o       8進整数
   ~x       16進整数
   ~br      b進整数
   ~r       整数を一字一字
   ~p       複数形
   ~f       浮動小数点
   ~e       科学的記数法
   ~g       大きさに応じて~fまたは~e
   ~h       多倍長浮動小数点
   ~a       Maxima関数文字列を使う
   ~s       ~aと同様, しかし"ダブルコーテーション"で囲まれた出力
   ~~       ~
   ~<       行揃え, ~> 終端
   ~(       大文字小文字変換, ~) 終端
   ~[       選択, ~] 終端
   ~{       繰り返し, ~} 終端

多倍長浮動小数点に関するディレクティブ ~hは Lisp標準ではないので、以下に具体的に示します。

ディレクティブ ~*はサポートされていないことに注意してください。

もし destがストリームか trueなら、 printffalseを返します。 そうでなければ、 printfは出力を含む文字列を返します。

 
(%i1) printf( false, "~a ~a ~4f ~a ~@r", 
              "String",sym,bound,sqrt(12),144), bound = 1.234;
(%o1)                 String sym 1.23 2*sqrt(3) CXLIV
(%i2) printf( false,"~{~a ~}",["one",2,"THREE"] );
(%o2)                          one 2 THREE 
(%i3) printf(true,"~{~{~9,1f ~}~%~}",mat ),
          mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$
      1.1       2.0       3.3 
      4.0       5.0       6.0 
      7.0       8.9       9.0 
(%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
(%i5) printf( false,control, n,n,if n=1 then 1 else 2 ), n=2;
(%o5)                    Two birds are singing.

ディレクティブ ~hは多倍長浮動小数点を扱うために導入されました。

 
~w,d,e,x,o,p@H
 w : width
 d : decimal digits behind floating point
 e : minimal exponent digits
 x : preferred exponent
 o : overflow character
 p : padding character
 @ : display sign for positive numbers
 
(%i1) fpprec : 1000$
(%i2) printf(true, "|~h|~%", 2.b0^-64)$
|0.0000000000000000000542101086242752217003726400434970855712890625|
(%i3) fpprec : 26$
(%i4) printf(true, "|~h|~%", sqrt(2))$
|1.4142135623730950488016887|
(%i5) fpprec : 24$
(%i6) printf(true, "|~h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i7) printf(true, "|~28h|~%", sqrt(2))$
|   1.41421356237309504880169|
(%i8) printf(true, "|~28,,,,,'*h|~%", sqrt(2))$
|***1.41421356237309504880169|
(%i9) printf(true, "|~,18h|~%", sqrt(2))$
|1.414213562373095049|
(%i10) printf(true, "|~,,,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-3|
(%i11) printf(true, "|~,,2,-3h|~%", sqrt(2))$
|1414.21356237309504880169b-03|
(%i12) printf(true, "|~20h|~%", sqrt(2))$
|1.41421356237309504880169|
(%i13) printf(true, "|~20,,,,'+h|~%", sqrt(2))$
|++++++++++++++++++++|
·

Categories:  File output ·Package stringproc

関数: readchar (stream)

streamの一番目の文字を取り出し、返します。 ファイルの終端になったら、 readcharfalseを返します。

例: make_string_input_streamを参照してください。

·

Categories:  File input ·Package stringproc

関数: readline (stream)

streamの現在位置から行の終わりまでの文字を含む文字列か、 もしファイルの終わりが来たら falseを返します。

·

Categories:  File input ·Package stringproc

関数: sprint (expr_1, …, expr_n)

引数を順に評価し、一番左から始まる「一行」に表示します。 数は数の右隣に’-’と共に印字され、行の長さを無視します。 もし中間行ブレークを置きたいなら、 newline()stringproc.lisp から自動ロードされます― が役に立つかもしれません。

例:

 
(%i1) for n:0 thru 19 do sprint( fib(n) )$
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
(%i2) for n:0 thru 22 do ( 
         sprint(fib(n)), if mod(n,10)=9 then newline() )$
0 1 1 2 3 5 8 13 21 34 
55 89 144 233 377 610 987 1597 2584 4181 
6765 10946 17711 
·

Categories:  Package stringproc


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

79.3 Functions and Variables for characters

関数: alphacharp (char)

もし charがアルファベット文字なら trueを返します。

関数: alphanumericp (char)

もし charがアルファベット文字か数字なら trueを返します。

関数: ascii (int)

ASCIIコード int( -1 < int < 256 )に対応する文字を返します。

 
(%i1) for n from 0 thru 255 do ( 
   tmp: ascii(n), if alphacharp(tmp) then sprint(tmp),
      if n=96 then newline() )$
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z
·

Categories:  Package stringproc

関数: cequal (char_1, char_2)

もし char_1char_2が同じなら trueを返します。

関数: cequalignore (char_1, char_2)

cequalと同様ですが、文字の大小を無視します。

関数: cgreaterp (char_1, char_2)

もし char_1の ASCIIコードが char_2のそれより大きいなら trueを返します。

関数: cgreaterpignore (char_1, char_2)

cgreaterpと同様ですが、文字の大小を無視します。

関数: charp (obj)

もし objが Maxima-文字なら trueを返します。 例えばイントロダクションを参照してください。

関数: cint (char)

charの ASCIIコードを返します。

·

Categories:  Package stringproc

関数: clessp (char_1, char_2)

もし char_1の ASCIIコードが char_2のそれより小さいなら trueを返します。

関数: clesspignore (char_1, char_2)

clesspと同様ですが、文字の大小を無視します。

関数: constituent (char)

もし charがグラフィック文字であり、スペース文字でないなら、 trueを返します。 グラフィック文字は見ることができる文字とスペース文字です。 (constituentは、 Paul Graham, ANSI Common Lisp, 1996, page 67で定義されています。)

 
(%i1) for n from 0 thru 255 do ( 
tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
! " #  %  ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
d e f g h i j k l m n o p q r s t u v w x y z { | } ~

関数: cunlisp (lisp_char)

Lisp文字を Maxima文字に変換します。 (必要としないでしょう。)

·

Categories:  Package stringproc

関数: digitcharp (char)

もし charが 0から 9までの数字なら trueを返します。

関数: lcharp (obj)

もし objが Lisp文字なら trueを返します。 (必要としないでしょう。)

関数: lowercasep (char)

もし charが小文字なら trueを返します。

変数: newline

改行文字。

変数: space

スペース文字。

変数: tab

タブ文字。

関数: uppercasep (char)

もし charが大文字なら trueを返します。


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

79.4 Functions and Variables for strings

関数: base64 (string)

stringの base64表現を文字列として返します。

例:

 
(%i1) base64 : base64("foo bar baz");
(%o1)                       Zm9vIGJhciBiYXo=
(%i2) string : base64_decode(base64);
(%o2)                          foo bar baz
·

Categories:  Package stringproc

関数: base64_decode (base64-string)

base64でコードされた文字列 base64-stringを元の文字列にデコードします。

例: base64を参照してください。

·

Categories:  Package stringproc

関数: charat (string, n)

stringn番目の文字を返します。 stringの一番目の文字は n = 1で返されます。

 
(%i1) charat("Lisp",1);
(%o1)                           L
·

Categories:  Package stringproc

関数: charlist (string)

stringの文字すべてのリストを返します。

 
(%i1) charlist("Lisp");
(%o1)                     [L, i, s, p]
(%i2) %[1];
(%o2)                           L
·

Categories:  Package stringproc

関数: eval_string (str)

文字列 strを Maxima式としてパースし、評価します。 文字列 strは終端子(ドル記号 $またはセミコロン ;) を持つかもしれませんし持たないかもしれません。

もし複数あるなら、最初の式だけがパースされ、評価されます。

もし strが文字列でないならエラーが出力されます。

例:

 
(%i1) eval_string ("foo: 42; bar: foo^2 + baz");
(%o1)                       42
(%i2) eval_string ("(foo: 42, bar: foo^2 + baz)");
(%o2)                   baz + 1764

parse_stringも参照してください。

·

Categories:  Package stringproc

関数: md5sum (string)

stringの md5チェックサムを返します。 戻り値は32個の16進文字を保証する文字列です。 戻り値を整数にパースするためには、入力基数を 16に設定して、文字列をゼロで前置してください。

例:

 
(%i1) string : md5sum("foo bar baz");
(%o1)                  ab07acbb1e496801937adfa772424bf7
(%i2) ibase : obase : 16.$

(%i3) integer : parse_string(sconcat(0, string));
(%o3)                 0ab07acbb1e496801937adfa772424bf7
·

Categories:  Package stringproc

関数: parse_string (str)

文字列 strを Maxima式としてパースします(評価しません)。 文字列 strは終端子(ドル記号 $またはセミコロン ;) を持つかもしれませんし持たないかもしれません。

もし複数あるなら、最初の式だけがパースされ、評価されます。

もし strが文字列でないならエラーが出力されます。

例:

 
(%i1) parse_string ("foo: 42; bar: foo^2 + baz");
(%o1)                    foo : 42
(%i2) parse_string ("(foo: 42, bar: foo^2 + baz)");
                                   2
(%o2)          (foo : 42, bar : foo  + baz)

eval_stringも参照してください。

·

Categories:  Package stringproc

関数: scopy (string)

stringのコピーを新しい文字列として返します。

·

Categories:  Package stringproc

関数: sdowncase (string)
関数: sdowncase (string, start)
関数: sdowncase (string, start, end)

supcaseと同様ですが、大文字を小文字に変換します。

·

Categories:  Package stringproc

関数: sequal (string_1, string_2)

もし string_1string_2が同じ長さで、同じ文字を含むなら、 trueを返します。

関数: sequalignore (string_1, string_2)

sequalと同様ですが、文字の大小を無視します。

関数: sexplode (string)

sexplodeは関数charlistの別名です。

·

Categories:  Package stringproc

関数: sha1sum (string)

stringのsha1フィンガープリントを返します。 戻り値は48個の16進文字を保証する文字列です。 戻り値を整数にパースするためには、入力基数を 16に設定して、文字列をゼロで前置してください。

例:

 
(%i1) string : sha1sum("foo bar baz");
(%o1)              c7567e8b39e2428e38bf9c9226ac68de4c67dc39
(%i2) ibase : obase : 16.$

(%i3) integer : parse_string(sconcat(0, string));
(%o3)              0c7567e8b39e2428e38bf9c9226ac68de4c67dc39
·

Categories:  Package stringproc

関数: simplode (list)
関数: simplode (list, delim)

simplodeは式のリストを取り、それらを結合して文字列にします。 もしデリミタ delimを指定しないなら、 simplodeはデリミタを使いません。 delimは任意の文字列を取り得ます。

 
(%i1) simplode(["xx[",3,"]:",expand((x+y)^3)]);
(%o1)             xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
(%i2) simplode( sexplode("stars")," * " );
(%o2)                   s * t * a * r * s
(%i3) simplode( ["One","more","coffee."]," " );
(%o3)                   One more coffee.
·

Categories:  Package stringproc

関数: sinsert (seq, string, pos)

substring (string, 1, pos - 1)と 文字列 seqsubstring (string, pos)の結合となる文字列を返します。 stringの一番目の文字は位置 1にあることに注意してください。

 
(%i1) s: "A submarine."$
(%i2) concat( substring(s,1,3),"yellow ",substring(s,3) );
(%o2)                  A yellow submarine.
(%i3) sinsert("hollow ",s,3);
(%o3)                  A hollow submarine.
·

Categories:  Package stringproc

関数: sinvertcase (string)
関数: sinvertcase (string, start)
関数: sinvertcase (string, start, end)

位置 startから endまでのそれぞれの文字を逆順にすることを除いて stringを返します。 もし endを与えないなら、 startから stringの終わりまでのすべての文字列を置き換えます。

 
(%i1) sinvertcase("sInvertCase");
(%o1)                      SiNVERTcASE
·

Categories:  Package stringproc

関数: slength (string)

stringの中の文字の数を返します。

·

Categories:  Package stringproc

関数: smake (num, char)

num個の文字 charを持つ新しい文字列を返します。

 
(%i1) smake(3,"w");
(%o1)                          www
·

Categories:  Package stringproc

関数: smismatch (string_1, string_2)
関数: smismatch (string_1, string_2, test)

string_1string_2が異なる string_1の最初の文字の位置、または falseを返します。 マッチングのデフォルトのテスト関数は sequalです。 もし smismatchが文字の大小を無視なければいけないなら、 テストとして sequalignoreを使ってください。

 
(%i1) smismatch("seven","seventh");
(%o1)                           6
·

Categories:  Package stringproc

関数: split (string)
関数: split (string, delim)
関数: split (string, delim, multiple)

stringのすべてのトークンのリストを返します。 それぞれのトークンはパースされていない文字列です。 splitdelimをデリミタとして使います。 もし delimが与えられないなら、 スペース文字がデフォルトのデリミタです。 multipleはデフォルトで trueのブーリアン変数です。 重複デリミタが 1つとして読まれます。 これは、もしタブが複数スペース文字として保存されているなら、役立ちます。 もしmultiplefalseに設定されるなら、 それぞれのデリミタが有効です。

 
(%i1) split("1.2   2.3   3.4   4.5");
(%o1)                 [1.2, 2.3, 3.4, 4.5]
(%i2) split("first;;third;fourth",";",false);
(%o2)               [first, , third, fourth]
·

Categories:  Package stringproc

関数: sposition (char, string)

stringの中で charとマッチする最初の文字の位置を返します。 stringの一番目の文字は位置 1にあります。 文字の大小を無視した文字のマッチに関しては, ssearchを参照してください。

·

Categories:  Package stringproc

関数: sremove (seq, string)
関数: sremove (seq, string, test)
関数: sremove (seq, string, test, start)
関数: sremove (seq, string, test, start, end)

string同様文字列を返しますが、 seqとマッチする部分文字列すべてなしに返します。 マッチのデフォルトのテスト関数は sequalです。 もし sremoveseqを検索する間文字の大小を無視しなければいけないなら、 テストとして sequalignoreを使ってください。 探索を限定するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

 
(%i1) sremove("n't","I don't like coffee.");
(%o1)                   I do like coffee.
(%i2) sremove ("DO ",%,'sequalignore);
(%o2)                    I like coffee.
·

Categories:  Package stringproc

関数: sremovefirst (seq, string)
関数: sremovefirst (seq, string, test)
関数: sremovefirst (seq, string, test, start)
関数: sremovefirst (seq, string, test, start, end)

seqとマッチする最初の文字列だけが削除されることを除いて、 sremove同様です。

·

Categories:  Package stringproc

関数: sreverse (string)

stringの文字すべてが逆順の文字列を返します。

·

Categories:  Package stringproc

関数: ssearch (seq, string)
関数: ssearch (seq, string, test)
関数: ssearch (seq, string, test, start)
関数: ssearch (seq, string, test, start, end)

文字列seqとマッチする stringの最初の部分文字列の位置を返します。 マッチのためのデフォルトのテスト関数は sequalです。 もし ssearchが文字の大小を無視しなければいけないなら、 テストとして sequalignoreを使ってください。 検索を限定するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

 
(%i1) ssearch("~s","~{~S ~}~%",'sequalignore);
(%o1)                                  4
·

Categories:  Package stringproc

関数: ssort (string)
関数: ssort (string, test)

test (c, d)false、かつ、 test (d, c)trueであるような 2つの連続する文字 cdがないような順で stringの文字すべてを含む文字列を返します。

ソートのためのデフォルトのテスト関数は clesspです。 テスト関数一式は {clessp, clesspignore, cgreaterp, cgreaterpignore, cequal, cequalignore}です。

 
(%i1) ssort("I don't like Mondays.");
(%o1)                    '.IMaddeiklnnoosty
(%i2) ssort("I don't like Mondays.",'cgreaterpignore);
(%o2)                 ytsoonnMlkIiedda.'   
·

Categories:  Package stringproc

関数: ssubst (new, old, string)
関数: ssubst (new, old, string, test)
関数: ssubst (new, old, string, test, start)
関数: ssubst (new, old, string, test, start, end)

stringの中の oldにマッチするすべての部分文字列を newで置き換えた文字列を返します。 oldnewは同じ長さである必要はありません。 マッチのためのデフォルトのテスト関数は sequalです。 もし ssubstが oldを検索する間大文字小文字を無視すべきなら、 テストとして sequalignoreを使ってください。 検索を制限するには startendを使ってください。 stringの一番目の文字は位置 1にあることに注意してください。

 
(%i1) ssubst("like","hate","I hate Thai food. I hate green tea.");
(%o1)          I like Thai food. I like green tea.
(%i2) ssubst("Indian","thai",%,'sequalignore,8,12);
(%o2)         I like Indian food. I like green tea.
·

Categories:  Package stringproc

関数: ssubstfirst (new, old, string)
関数: ssubstfirst (new, old, string, test)
関数: ssubstfirst (new, old, string, test, start)
関数: ssubstfirst (new, old, string, test, start, end)

oldとマッチする最初の部分文字列だけを置き換えることを除いて、 substと同様です。

·

Categories:  Package stringproc

関数: strim (seq,string)

stringの両端から seqに現れるすべての文字を除いた文字列を返します。

 
(%i1) "/* comment */"$
(%i2) strim(" /*",%);
(%o2)                        comment
(%i3) slength(%);
(%o3)                           7
·

Categories:  Package stringproc

関数: striml (seq, string)

stringの左端だけトリムすることを除いて strimと同様です。

·

Categories:  Package stringproc

関数: strimr (seq, string)

stringの右端だけトリムすることを除いて strimと同様です。

·

Categories:  Package stringproc

関数: stringp (obj)

objが文字列なら trueを返します。 例はイントロダクションを参照してください。

関数: substring (string, start)
関数: substring (string, start, end)

位置 startで始まり位置 endで終わる stringの部分文字列を返します。 位置 endの文字は含まれません。 もし endが与えられないなら、部分文字列は文字列の残りを含みます。 stringの一番目の文字は位置 1にあることに注意してください。

 
(%i1) substring("substring",4);
(%o1)                        string
(%i2) substring(%,4,6);
(%o2)                          in
·

Categories:  Package stringproc

関数: supcase (string)
関数: supcase (string, start)
関数: supcase (string, start, end)

stringの位置 startから endまでの小文字を対応する大文字に置き換えた文字列を返します。 もし endが与えられないなら、 startから stringの終わりまでのすべての小文字が置き換えられます。

 
(%i1) supcase("english",1,2);
(%o1)                        English
·

Categories:  Package stringproc

関数: tokens (string)
関数: tokens (string, test)

stringから抽出されたトークンのリストを返します。 トークンは、文字があるテスト関数を満たす部分文字列です。 もしtestを与えないなら、 constituentをデフォルトテストとして使います。 {constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp, characterp, alphanumericp}はテスト関数一式です。 (tokensの LispバージョンはPaul Grahamによって書かれました。 ANSI Common Lisp, 1996, page 67.)

 
(%i1) tokens("24 October 2005");
(%o1)                  [24, October, 2005]
(%i2) tokens("05-10-24",'digitcharp);
(%o2)                     [05, 10, 24]
(%i3) map(parse_string,%);
(%o3)                      [5, 10, 24]
·

Categories:  Package stringproc


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は市川 雄二によって2014年9月月15日texi2html 1.82を用いて生成されました。