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

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 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はファイルからかファイルへの開いたストリームでなかればいけません。 その時 flengthはこのファイルの中に現在存在するバイト数を返します。

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

関数: flush_output (stream)

streamをフラッシュします。 ここで streamはファイルへの出力ストリームでなければいけません。

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

Categories:  File output · Package stringproc

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

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

関数: freshline  
    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  
    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 ()  
    newline (stream)

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

Categories:  File output · Package stringproc

関数: opena (file)

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

バイナリ出力に関しては opena_binaryを参照してください。

Categories:  File output · Package stringproc

関数: openr (file)

fileへの文字入力ストリームを返します。 openrfileが存在すること仮定します。

バイナリ出力に関しては openr_binaryを参照してください。

Categories:  File input · Package stringproc

関数: openw (file)

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

バイナリ出力に関しては openw_binaryを参照してください。

Categories:  File output · Package stringproc

関数: printf  
    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

関数: readbyte (stream)

streamの中の最初のバイトを削除し返します。 streamはバイナリ入力ストリームでなければいけません。 もしファイルの終端に来たら、readbytefalseを返します。

例: OpenSSLのAESで暗号化されたファイルから最初の16バイトを読みます。

(%i1) ibase: obase: 16.$

(%i2) in: openr_binary("msg.bin");
(%o2)                       #<input stream msg.bin>
(%i3) (L:[],  thru 16. do push(readbyte(in), L),  L:reverse(L));
(%o3) [53, 61, 6C, 74, 65, 64, 5F, 5F, 88, 56, 0DE, 8A, 74, 0FD, 0AD, 0F0]
(%i4) close(in);
(%o4)                                true
(%i5) map(ascii, rest(L,-8));
(%o5)                      [S, a, l, t, e, d, _, _]
(%i6) salt: octets_to_number(rest(L,8));
(%o6)                          8856de8a74fdadf0

Categories:  File input · 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

関数: writebyte (byte, stream)

streambyteを書き出します。 streamはバイナリ出力ストリームでなければいけません。 writebytebyteを返します。

例: バイナリファイル出力ストリームに数バイト書き出します。 この例では、バイトすべては印字可能文字に対応していて printfileで印字されます。 バイトは flush_outpucloseが呼ばれるまでストリームに残ります。

(%i1) ibase: obase: 16.$

(%i2) bytes: map(cint, charlist("GNU/Linux"));
(%o2)                [47, 4E, 55, 2F, 4C, 69, 6E, 75, 78]
(%i3) out: openw_binary("test.bin");
(%o3)                      #<output stream test.bin>
(%i4) for i thru 3 do writebyte(bytes[i], out);
(%o4)                                done
(%i5) printfile("test.bin")$

(%i6) flength(out);
(%o6)                                  0
(%i7) flush_output(out);
(%o7)                                true
(%i8) flength(out);
(%o8)                                  3
(%i9) printfile("test.bin")$
GNU
(%i0A) for b in rest(bytes,3) do writebyte(b, out);
(%o0A)                               done
(%i0B) close(out);
(%o0B)                               true
(%i0C) printfile("test.bin")$
GNU/Linux

Categories:  File output · Package stringproc


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

79.3 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 String Processing

関数: 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

関数: 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  
    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

関数: simplode  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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  
    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


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

79.5 Octets and Utilities for Cryptography

関数: base64 (arg)

argの base64表現を文字列として返します。 引数 argは文字列か非負整数かオクテットのリストです。

例:

(%i1) base64: base64("foo bar baz");
(%o1)                          Zm9vIGJhciBiYXo=
(%i2) string: base64_decode(base64);
(%o2)                            foo bar baz
(%i3) obase: 16.$
(%i4) integer: base64_decode(base64, 'number);
(%o4)                       666f6f206261722062617a
(%i5) octets: base64_decode(base64, 'list);
(%o5)            [66, 6F, 6F, 20, 62, 61, 72, 20, 62, 61, 7A]
(%i6) ibase: 16.$
(%i7) base64(octets);
(%o7)                          Zm9vIGJhciBiYXo=

もし argがウムラウト(127より大きなオクテット)含むなら、 結果のbase64文字列はプラットフォーム依存であることに注意してください。 しかし、デコードされた文字列はオリジナルと同じになります。

Categories:  Package stringproc

関数: base64_decode  
    base64_decode (base64-string)  
    base64_decode (base64-string, return-type)

デフォルトでは base64_decodebase64-stringを元の文字列にデコードします。

オプション引数 return-typeを与えると base64_decodeは代わりに対応する数やオクテットのリストを返します。

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

Categories:  Package stringproc

関数: crc24sum  
    crc24sum (octets)  
    crc24sum (octets, return-type)

デフォルトでは crc24sumは オクテットリストの CRC24チェックサムを文字列として返します。

オプション引数 return-typeを与えると crc24sumは代わりに対応する数かオクテットリストを返します。

例:

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQEcBAEBAgAGBQJVdCTzAAoJEG/1Mgf2DWAqCSYH/AhVFwhu1D89C3/QFcgVvZTM
wnOYzBUURJAL/cT+IngkLEpp3hEbREcugWp+Tm6aw3R4CdJ7G3FLxExBH/5KnDHi
rBQu+I7+3ySK2hpryQ6Wx5J9uZSa4YmfsNteR8up0zGkaulJeWkS4pjiRM+auWVe
vajlKZCIK52P080DG7Q2dpshh4fgTeNwqCuCiBhQ73t8g1IaLdhDN6EzJVjGIzam
/spqT/sTo6sw8yDOJjvU+Qvn6/mSMjC/YxjhRMaQt9EMrR1AZ4ukBF5uG1S7mXOH
WdiwkSPZ3gnIBhM9SuC076gLWZUNs6NqTeE3UzMjDAFhH3jYk1T7mysCvdtIkms=
=WmeC
-----END PGP SIGNATURE-----
(%i1) ibase : obase : 16.$
(%i2) sig64 : sconcat(
 "iQEcBAEBAgAGBQJVdCTzAAoJEG/1Mgf2DWAqCSYH/AhVFwhu1D89C3/QFcgVvZTM",
 "wnOYzBUURJAL/cT+IngkLEpp3hEbREcugWp+Tm6aw3R4CdJ7G3FLxExBH/5KnDHi",
 "rBQu+I7+3ySK2hpryQ6Wx5J9uZSa4YmfsNteR8up0zGkaulJeWkS4pjiRM+auWVe",
 "vajlKZCIK52P080DG7Q2dpshh4fgTeNwqCuCiBhQ73t8g1IaLdhDN6EzJVjGIzam",
 "/spqT/sTo6sw8yDOJjvU+Qvn6/mSMjC/YxjhRMaQt9EMrR1AZ4ukBF5uG1S7mXOH",
 "WdiwkSPZ3gnIBhM9SuC076gLWZUNs6NqTeE3UzMjDAFhH3jYk1T7mysCvdtIkms=" )$
(%i3) octets: base64_decode(sig64, 'list)$
(%i4) crc24: crc24sum(octets, 'list);
(%o4)                          [5A, 67, 82]
(%i5) base64(crc24);
(%o5)                              WmeC

Categories:  Package stringproc

関数: md5sum  
    md5sum (arg)  
    md5sum (arg, return-type)

文字列か非負整数かオクテットのリストの MD5チェックサムを返します。 デフォルトの戻り値は32ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると md5sumは代わりに対応する数かオクテットリストを返します。

例:

(%i1) ibase: obase: 16.$
(%i2) msg: "foo bar baz"$
(%i3) string: md5sum(msg);
(%o3)                  ab07acbb1e496801937adfa772424bf7
(%i4) integer: md5sum(msg, 'number);
(%o4)                 0ab07acbb1e496801937adfa772424bf7
(%i5) octets: md5sum(msg, 'list);
(%o5)        [0AB,7,0AC,0BB,1E,49,68,1,93,7A,0DF,0A7,72,42,4B,0F7]
(%i6) sdowncase( printf(false, "~{~2,'0x~^:~}", octets) );
(%o6)           ab:07:ac:bb:1e:49:68:01:93:7a:df:a7:72:42:4b:f7

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 MD5チェックサムはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc

関数: number_to_octets (number)

numberのオクテット表現をオクテットのリストとして返します。 numberは非負整数でなければいけません。

例:

(%i1) ibase : obase : 16.$
(%i2) octets: [0ca,0fe,0ba,0be]$
(%i3) number: octets_to_number(octets);
(%o3)                            0cafebabe
(%i4) number_to_octets(number);
(%o4)                      [0CA, 0FE, 0BA, 0BE]

Categories:  Package stringproc

関数: octets_to_number (octets)

octetsのリストの中のオクテットを連結し、数を返します。

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

Categories:  Package stringproc

関数: octets_to_oid (octets)

octetsのリストからオブジェクト識別子(OID)を計算します。

例: RSA encryption OID

(%i1) ibase : obase : 16.$
(%i2) oid: octets_to_oid([2A,86,48,86,0F7,0D,1,1,1]);
(%o2)                      1.2.840.113549.1.1.1
(%i3) oid_to_octets(oid);
(%o3)               [2A, 86, 48, 86, 0F7, 0D, 1, 1, 1]

Categories:  Package stringproc

関数: oid_to_octets (oid-string)

オブジェクト識別子(OID)を octetsのリストに変換します。

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

Categories:  Package stringproc

関数: sha1sum  
    sha1sum (arg)  
    sha1sum (arg, return-type)

文字列か非負整数かオクテットのリストの SHA1フィンガープリントを返します。 デフォルトの戻り値は40ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると sha1sumは代わりに対応する数かオクテットのリストを返します。

例:

(%i1) ibase: obase: 16.$
(%i2) msg: "foo bar baz"$
(%i3) string: sha1sum(msg);
(%o3)              c7567e8b39e2428e38bf9c9226ac68de4c67dc39
(%i4) integer: sha1sum(msg, 'number);
(%o4)             0c7567e8b39e2428e38bf9c9226ac68de4c67dc39
(%i5) octets: sha1sum(msg, 'list);
(%o5)  [0C7,56,7E,8B,39,0E2,42,8E,38,0BF,9C,92,26,0AC,68,0DE,4C,67,0DC,39]
(%i6) sdowncase( printf(false, "~{~2,'0x~^:~}", octets) );
(%o6)     c7:56:7e:8b:39:e2:42:8e:38:bf:9c:92:26:ac:68:de:4c:67:dc:39

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 SHA1フィンガープリントはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc

関数: sha256sum  
    sha256sum (arg)  
    sha256sum (arg, return-type)

文字列か非負整数かオクテットのリストの SHA256フィンガープリントを返します。 デフォルトの戻り値は64ヘックス文字を含む文字列です。

オプション引数 return-typeを与えると sha256sumは代わりに対応する数かオクテットのリストを返します。 (sha1sumを参照してください)

例:

(%i1) string: sha256sum("foo bar baz");
(%o1)  dbd318c1c462aee872f41109a4dfd3048871a03dedd0fe0e757ced57dad6f2d7

もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、 SHA256フィンガープリントはプラットフォーム依存であることに注意してください。

Categories:  Package stringproc


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

この文書は市川 雄二によって10月, 11 2015texi2html 1.76を用いて生成されました。