[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 84. stringproc

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 84.1 Introduction to String Processing

パッケージ `stringproc`はフォーマットやエンコードやデータストリームを含む文字列と文字を処理する関数を含みます。 例えば base64や hash関数といった暗号のためのいくつかのツールがこのパッケージを締めくくります。

これは `load(stringproc)`を介して直接ロードもできますし、関数の1つを使うと自動的にロードされます。

質問やバグレポートは、著者に連絡してください。 以下のコマンドは著者の eメールアドレスを印字します。

`printf(true, "~{~a~}@gmail.com", split(sdowncase("Volker van Nek")))$`

例えば `"Text"`とタイプすることで文字列が構成されます。 オプション変数 `stringdisp`がデフォルトの `false`に設定されている時、 ダブルクオートは印字されません。 stringpは オブジェクトが文字列かどうかのテストです。

    (%i1) str: "Text";
    (%o1)                         Text
    (%i2) stringp(str);
    (%o2)                         true

文字は、長さ1の文字列で表されます。 charpは対応するテストです。

    (%i1) char: "e";
    (%o1)                           e
    (%i2) charp(char);
    (%o2)                         true

Maximaでは文字列の位置インデックスはリストと同様 1から始まり、 以下の一貫性が成り立ちます。

    (%i1) is(charat("Lisp",1) = charlist("Lisp")[1]);
    (%o1)                         true

文字列は Maximaの式を含むかもしれません。 これらは parse_stringでパースできます。

    (%i1) map(parse_string, ["42" ,"sqrt(2)", "%pi"]);
    (%o1)                   [42, sqrt(2), %pi]
    (%i2) map('float, %);
    (%o2)        [42.0, 1.414213562373095, 3.141592653589793]

文字列は文字として処理したり、オクテットとしてバイナリ形式で処理できます。 変換の関数は string_to_octetsとoctets_to_stringです。 使用できるエンコードはプラットフォームやアプリケーション、裏にあるLispに依存します。 (以下はSBCLでコンパイルされた GNU/Linux上の Maximaを見せます)

    (%i1) obase: 16.$
    (%i2) string_to_octets("$£€", "cp1252");
    (%o2)                     [24, 0A3, 80]
    (%i3) string_to_octets("$£€", "utf-8");
    (%o3)               [24, 0C2, 0A3, 0E2, 82, 0AC]

文字列は文字ストリームに書かれたり、オクテットとしてバイナリストリームに書かれたりします。 以下の例は文字のファイル入出力を例示します。

openwはファイルへの出力ストリームを返します。 printfはそのファイルにフォーマットされたものを書き込みます。 例えば、closeで ストリームに含まれるすべての文字はファイルに書き込まれます。

    (%i1) s: openw("file.txt");
    (%o1)                #<output stream file.txt>
    (%i2) printf(s, "~%~d ~f ~a ~a ~f ~e ~a~%",
    42, 1.234, sqrt(2), %pi, 1.0e-2, 1.0e-2, 1.0b-2)$
    (%i3) close(s)$

そして openrは以前使ったファイルから入力ストリームを返します。 readlineは文字列として読み込んだ行を返します。 文字列は、例えば splitや tokensでトークン化され、 最終的に parse_stringでパースできます。

    (%i4) s: openr("file.txt");
    (%o4)                 #<input stream file.txt>
    (%i5) readline(s);
    (%o5)          42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
    (%i6) map(parse_string, split(%));
    (%o6)       [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
    (%i7) close(s)$

Categories: Strings · Share packages · Package stringproc

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 84.2 Input and Output

例: ファイルへのフォーマットされた印字。

    (%i1) s: openw("file.txt");
    (%o1)                      #<output stream 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("file.txt");
    (%o5)                      #<input stream 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`を返します。

  Categories: File input · File output · Package stringproc

関数: flength (stream)

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

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

  Categories: File input · File output · Package stringproc

関数: flush_output (stream)

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

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

  Categories: File output · Package stringproc

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

  もし posが使われてないなら、 streamの中の現在位置を返します。 もし posが使われているなら、 `fposition`は streamの中の位置を設定します。 posは正の数でなければいけません。

  データストリームの位置は文字列やリスト同様、1から始まります。 すなわち、 streamの最初の要素は位置 1にあります。

  Categories: File input · File output · Package stringproc

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

  もし位置が行の最初でないなら 標準出力ストリームに改行を書き込み、 `true`を返します。 オプション引数 streamを使うと、そのストリームに改行を書き込みます。 `freshline()`が期待通りに動かない場合がいくつかあります。

  `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の一部とファイルの終了を含む入力ストリームを返します。 オプション引数がない場合、ストリームは全体の文字列を含み、一番目の文字の前に位置されます。 startと endはストリームに含まれた部分文字列を定義します。 一番目の文字は位置 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()`が期待通りに動かないいくつかの場合があります。

  `newline()`の使用の例に関しては、 sprintを参照してください。

  Categories: File output · Package stringproc

関数: opena (file)

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

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

  Categories: File output · Package stringproc

関数: openr (file)

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

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

  Categories: File input · Package stringproc

関数: openw (file)

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

  バイナリ出力に関しては 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`なら、 `printf`は `false`を返します。 そうでなければ、 `printf`は出力を含む文字列を返します。 デフォルトでは、ストリーム stdin, stdout, stderrが定義されています。 もしmaximaがサーバーとして走っているなら (これは もし maximaがグラフィカルユーザーインタフェースと通信しているなら通常のケースです)、 `setup-client`は old_stdoutと old_stderrも定義します。

  `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`なら、 `printf`は `false`を返します。 そうでなければ、 `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はバイナリ入力ストリームでなければいけません。 もしファイルの終端に来たら、`readbyte`は `false`を返します。

  例: 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の一番目の文字を取り出し、返します。 ファイルの終端になったら、 `readchar`は `false`を返します。

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

  Categories: File input · Package stringproc

関数: readline (stream)

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

  Categories: File input · Package stringproc

関数: sprint (expr_1, …, expr_n)

  引数を順に評価し、一番左から始まる「一行」に表示します。 式は数の右隣にスペース文字と共に印字され、行の長さを無視します。 改行には `newline()`が役に立つかもしれません。

  例: `sprint`を使って連続的に印字。 `newline()`で改行を生成。

      (%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)

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

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

      (%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

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 84.3 Characters

文字は長さ 1の文字列です。

関数: adjust_external_format ()

  Lispリーダーの現在の外部フォーマットに関する情報を印字し、 外部フォーマットのエンコーディングが Maximaを走らせているアプリケーションのエンコーディングと違う場合、 `adjust_external_format`はエンコーディングの調整を試みて、 ヘルプか指示を印字します。 `adjust_external_format`は、 外部フォーマットが変更された時 `true`を、 そうでなければ `false`を返します。

  cint, unicode, octets_to_string, string_to_octets のような関数は、 Unicode文字フルレンジで適切に動くために、 Lispリーダーの外部フォーマットとして UTF-8を必要とします。

  例(2016年3月 Windows上の Maxima): デフォルトの外部フォーマットがアプリケーションが提供するエンコーディングと等しくない時に `adjust_external_format`を使用

  1. コマンドライン Maxima

  端末セッションが好まれる場合、 SBCLでコンパイルされた Maximaを使うことをお勧めします。 そうすれば Unicodeがデフォルトでサポートされ、 `adjust_external_format`を呼び出す必要がありません。

  もし MaximaがCLISPか GCLでコンパイルされたなら、 端末エンコーディングを CP850から CP1252に変更することをお勧めします。 `adjust_external_format`がヘルプを印字します。

  CCLは UTF-8を読み込む一方、端末入力はデフォルトで CP850です。 CCLは CP1252をサポートしません。 `adjust_external_format`は 端末エンコーディングと外部フォーマット両方を iso-8859-1に変更するための指示を印字します。

  2. wxMaxima

  wxMaximaでは SBCLはデフォルトで CP1252を読み込みますが、 アプリケーションからの入力は UTF-8エンコードです。 調整が必要です。

  一度、`adjust_external_format`を呼び出し、 Maximaを再起動すると、 デフォルト外部フォーマットは UTF-0になります。

      (%i1)adjust_external_format();
      The line
      (setf sb-impl::*default-external-format* :utf-8)
      has been appended to the init file
      C:/Users/Username/.sbclrc
      Please restart Maxima to set the external format to UTF-8.
      (%i1) false

  Maximaを再起動。

      (%i1) adjust_external_format();
      The external format is currently UTF-8
      and has not been changed.
      (%i1) false

  Categories: Package stringproc

関数: alphacharp (char)

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

  非 US-ASCII文字をアルファベット文字か確認するには、 背後のLispが完全なUnicodeサポートを提供しなければいけません。 例えば、ドイツ語のウムラウトは GNU/Linux上の SBCLではアルファベット文字として検出されますが、 GCLではそうなりません。 (Windows Maximaでは、SBCLでコンパイルされた時、 UTF-8を設定しなければいけません。 詳しくは adjust_external_formatを参照してください)

  例: 非 US-ASCII文字のテスト

  背後のLisp (SBCL, GNU/Linux)は タイプされた文字をLisp文字に変換してテストすることができます。

      (%i1) alphacharp("ü");
      (%o1)                          true

  GCLではこれはできまsねん。 エラーが起こります。

      (%i1) alphacharp("u");
      (%o1)                          true
      (%i2) alphacharp("ü");

      package stringproc: ü cannot be converted into a Lisp character.
       -- an error.

  Categories: Predicate functions · Package stringproc

関数: alphanumericp (char)

  もし charがアルファベット文字か数字なら `true`を返します。 (対応する US-ASCII文字だけが数字とみなされます)

  注意: alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

関数: ascii (int)

  `128`未満の整数 intに対応するUS-ASCII文字を返します。

  `127`より大きな符号位置を変換するには unicodeを参照してください。

  例:

      (%i1) for n from 0 thru 127 do (
              ch: ascii(n),
              if alphacharp(ch) then sprint(ch),
              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_1と char_2が同じ文字なら `true`を返します。

  Categories: Predicate functions · Package stringproc

関数: cequalignore (char_1, char_2)

  `cequal`と同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

関数: cgreaterp (char_1, char_2)

  もし char_1の符号位置が char_2のそれより大きいなら `true`を返します。

  Categories: Predicate functions · Package stringproc

関数: cgreaterpignore (char_1, char_2)

  `cgreaterp`と同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

関数: charp (obj)

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

  Categories: Predicate functions · Package stringproc

関数: cint (char)

  Maxima文字 charのUnicode符号位置を返します。 charは長さ `1`でなければいけません。

  例: いくつかの文字の16進符号位置。 (GNU/Linux上の SBCLを使った Maxima)

      (%i1) obase: 16.$
      (%i2) map(cint, ["$","£","€"]);
      (%o2)                           [24, 0A3, 20AC]

  警告: 外部フォーマットが UTF-8に設定されている時、 Windows上の SBCLを使った wxMaximaでは 16ビットより大きな符号位置に対応した文字を入力できません。 adjust_external_formatを参照してください。

  CMUCLはこれらの文字を 1文字として処理しません。 そして `cint`は `false`を返します。 回避策として文字をUTF-8オクテットを介して符号位置に変換すればいいかもしれません:

  `utf8_to_unicode(string_to_octets(character));`

  utf8_to_unicode, string_to_octetsを参照してください。

  Categories: Package stringproc

関数: clessp (char_1, char_2)

  もし char_1の符号位置が char_2のそれより小さいなら `true`を返します。

  Categories: Predicate functions · Package stringproc

関数: clesspignore (char_1, char_2)

  `clessp`と同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

関数: constituent (char)

  もし charが、グラフィック文字ですがスペース文字でないなら、 `true`を返します。 グラフィック文字は見ることができる文字とスペース文字です。 (`constituent`は Paul Grahamによって定義されています。 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 { | } ~

  Categories: Predicate functions · Package stringproc

関数: digitcharp (char)

  対応する US-ASCII文字が数字とみなされるような場合だけ もし charが数字なら `true`を返します。

  Categories: Predicate functions · Package stringproc

関数: lowercasep (char)

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

  注意: alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

変数: newline

  改行文字(ASCII文字 10)。

  Categories: Global variables · Package stringproc

変数: space

  スペース文字。

  Categories: Global variables · Package stringproc

変数: tab

  タブ文字。

  Categories: Global variables · Package stringproc

関数: unicode (arg)

  argが定義する文字を返します。 もし背後の LispがUnicodeのフルサポートを提供するなら argは Unicode符号位置か名前文字列です。

  例: 16進符号位置で定義された文字 (GNU/Linux上の SBCLを使った Maxima)

      (%i1) ibase: 16.$
      (%i2) map(unicode, [24, 0A3, 20AC]);
      (%o2)                            [$, £, €]

  警告: 外部フォーマットが UTF-8に設定されている時、 Windows上の SBCLを使った wxMaximaでは 16ビットより大きな符号位置に対応した文字を入力できません。 adjust_external_formatを参照してください。

  CMUCLはこれらの文字を 1文字として処理しません。 そして `cint`は `false`を返します。 回避策として文字をUTF-8オクテットを介して符号位置に変換すればいいかもしれません:

  `octets_to_string(unicode_to_utf8(code_point));`

  octets_to_string, unicode_to_utf8を参照してください。

  背後の Lispが Unicodeのフルサポートを提供するなら 文字は、名前で指定できるかもしれません。 以下は、ECL, CLISP, SBCLで可能です。 ここで Windows上のSBCLでは外部フォーマットはUTF-8に設定しなければいけません。 CMUCLも `unicode(name)`をサポートしますが、また 16ビット文字に限定されます。

  `unicode`の文字列引数は基本的に "~@c"して石を使った `printf`が返すのと同じ文字列を返します。 しかし以下で見るように、接頭辞 "#\"は省略しなければいけません。 下線はスペースに置き換えられ、大文字は小文字に置き換えられます。

  例 (続き): 名前で定義された文字 (GNU/Linux上の SBCLを使った Maxima)

      (%i3) printf(false, "~@c", unicode(0DF));
      (%o3)                    #\LATIN_SMALL_LETTER_SHARP_S
      (%i4) unicode("LATIN_SMALL_LETTER_SHARP_S");
      (%o4)                                  ß
      (%i5) unicode("Latin small letter sharp s");
      (%o5)                                  ß

  Categories: Package stringproc

関数: unicode_to_utf8 (code_point)

  Unicode code_pointに対応する UTF-8コードを含むリストを返します。

  例: Unicode符号位置をUTF-8に、そしてその逆の変換。

      (%i1) ibase: obase: 16.$
      (%i2) map(cint, ["$","£","€"]);
      (%o2)                           [24, 0A3, 20AC]
      (%i3) map(unicode_to_utf8, %);
      (%o3)                 [[24], [0C2, 0A3], [0E2, 82, 0AC]]
      (%i4) map(utf8_to_unicode, %);
      (%o4)                           [24, 0A3, 20AC]

  Categories: Package stringproc

関数: uppercasep (char)

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

  注意: alphacharpに関する注記を参照してください。

  Categories: Predicate functions · Package stringproc

変数: us_ascii_only

  このオプション変数は Maximaを走らせるアプリケーションが提供する文字エンコーディングが UTF-8なのに Lispリーダの外部フォーマットが UTF-8に等しくない時 Maximaに影響します。

  GNU/Linux上では Maximaが GCLでビルドされた時にはこれは trueです。 Windows上でGCLか SBCLでビルドされた場合もそうです。

  SBCLを使う場合、外部フォーマットを UTF-8に変更することをお薦めします。 その場合、 `us_ascii_only`は設定不要です。 詳細は adjust_external_formatを参照してください。

  `us_ascii_only`はデフォルトで `false`です。 その時、 Maxima自身が (すなわち上記の状況で) UTF-8エンコーディングをパースします。

  `us_ascii_only`が `true`に設定されている時、 文字列処理関数の引数に使われるすべての文字列は非US-ASCII文字を含まないと仮定されます。 その約束の下、Maximaは UTF-8をパースすることを避けて、文字列をより効率よく処理できます。

  Categories: Global variables · Package stringproc

関数: utf8_to_unicode (list)

  1文字のUTF-8エンコーディングを含む listに対応する Unicode符号位置を返します。

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

  Categories: Package stringproc

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 84.4 String Processing

文字列の位置インデックスは Maximaのリストと同様に 1から始まります。 charatの例を参照してください。

関数: charat (string, n)

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

      (%i1) charat("Lisp",1);
      (%o1)                           L
      (%i2) charlist("Lisp")[1];
      (%o2)                           L

  Categories: Package stringproc

関数: charlist (string)

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

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

  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_1と string_2が同じ文字の列を含むなら、 `true`を返します。

  Categories: Predicate functions · Package stringproc

関数: sequalignore (string_1, string_2)

  `sequal`と同様ですが、文字の大小を無視します。 背後のLispが文字をアルファベット文字として認識できる時 非 US-ASCII文字で可能なだけです。 alphacharpの注記を参照してください。

  Categories: Predicate functions · Package stringproc

関数: 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)`と 文字列 seq、`substring (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_1と string_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のすべてのトークンのリストを返します。 それぞれのトークンはパースされていない文字列です。 `split`は delimをデリミタとして使います。 もし delimが与えられないなら、 スペース文字がデフォルトのデリミタです。 multipleはデフォルトで `true`のブーリアン変数です。 重複デリミタが 1つとして読まれます。 これは、もしタブが複数スペース文字として保存されているなら、役立ちます。 もしmultipleが `false`に設定されるなら、 それぞれのデリミタが有効です。

  例:

      (%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`です。 もし `sremove`が seqを検索する間文字の大小を無視しなければいけないなら、 テストとして `sequalignore`を使ってください。 探索を限定するには startと endを使ってください。 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`を使ってください。 検索を限定するには startと endを使ってください。 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つの連続する文字 cと dがないような順で 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で置き換えた文字列を返します。 oldと newは同じ長さである必要はありません。 マッチのためのデフォルトのテスト関数は `sequal`です。 もし `ssubst`が oldを検索する間大文字小文字を無視すべきなら、 テストとして `sequalignore`を使ってください。 検索を制限するには startと endを使ってください。 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`を返します。 例はイントロダクションを参照してください。

  Categories: Predicate functions · Package stringproc

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

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 84.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_decode`は base64-stringを元の文字列にデコードします。

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

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

  Categories: Package stringproc

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

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

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

  例:

      -----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`は代わりに対応する数かオクテットリストを返します。 return-typeは `string`か `number`, `list`です。

  例:

      (%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

関数: mgf1_sha1
`mgf1_sha1` (seed, len)
`mgf1_sha1` (seed, len, return-type)

  可変長の擬似乱数を返します。 デフォルトでは戻り値は lenオクテットの長さの数字です。

  オプション引数 return-typeを使って `mgf1_sha1`は代わりに lenオクテットの対応するリストを返すことができます。 return-typeは `number`か `list`です。

  戻り値の計算は `RFC 3447` appendix `B.2.1 MGF1`に記述されています。 `SHA1`はハッシュ関数として使われます。 すなわち、計算された数字のランダム度は `SHA1`ハッシュのランダム度に拠ります。

  例:

      (%i1) ibase: obase: 16.$
      (%i2) number: mgf1_sha1(4711., 8);
      (%o2)                        0e0252e5a2a42fea1
      (%i3) octets: mgf1_sha1(4711., 8, 'list);
      (%o3)                  [0E0,25,2E,5A,2A,42,0FE,0A1]

  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

関数: octets_to_string
`octets_to_string` (octets)
`octets_to_string` (octets, encoding)

  現在のシステムのデフォルトに従って octetsのリストを文字列にデコードします。 非US-ASCII文字に対応するオクテットをデコードする時、 結果はプラットフォームやアプリケーション、背後のLispに依存します。

  例: システムデフォルトを使う (GCLでコンパイルされた Maxima。 それはフォーマット定義を使わず、 単にGNU/Linux端末がエンコードした UTF-8オクテットを渡します)

      (%i1) octets: string_to_octets("abc");
      (%o1)                            [61, 62, 63]
      (%i2) octets_to_string(octets);
      (%o2)                                 abc
      (%i3) ibase: obase: 16.$
      (%i4) unicode(20AC);
      (%o4)                                  €
      (%i5) octets: string_to_octets(%);
      (%o5)                           [0E2, 82, 0AC]
      (%i6) octets_to_string(octets);
      (%o6)                                  €
      (%i7) utf8_to_unicode(octets);
      (%o7)                                20AC

  Lispリーダの外部フォーマットが UTF-8に等しい場合、 オプション引数 encodingで オクテットを文字列に変換するエンコーディングを設定できます。 もし必要なら 外部フォーマットの変更に関してadjust_external_formatを参照してください。

  サポートするエンコーディングのいくつかの名前 (もっと知るには対応する Lispマニュアルを参照してください):
  CCL, CLISP, SBCL: `utf-8, ucs-2be, ucs-4be, iso-8859-1, cp1252, cp850`
  CMUCL: `utf-8, utf-16-be, utf-32-be, iso8859-1, cp1252`
  ECL: `utf-8, ucs-2be, ucs-4be, iso-8859-1, windows-cp1252, dos-cp850`

  例 (続き): オプションのエンコーディング引数を使う (GNU/Linux端末, SBCLでコンパイルされた Maxima).

      (%i8) string_to_octets("€", "ucs-2be");
      (%o8)                              [20, 0AC]

  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`は代わりに対応する数かオクテットのリストを返します。 return-typeは `string`か `number`, `list`です。

  例:

      (%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

関数: string_to_octets
`string_to_octets` (string)
`string_to_octets` (string, encoding)

  現在のシステムのデフォルトに従って stringをオクテットのリストにエンコードします。 非US-ASCII文字を含む文字列をエンコードする時、 結果はプラットフォームやアプリケーション、背後の Lispに依存します。

  Lispリーダの外部フォーマットが UTF-8に等しい場合、 オプション引数 encodingで オクテットを文字列に変換するエンコーディングを設定できます。 もし必要なら 外部フォーマットの変更に関してadjust_external_formatを参照してください。

  例やより詳しい情報は octets_to_stringを参照してください。

  Categories: Package stringproc

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by 市川雄二 on June, 21 2016 using texi2html 1.76.