[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
84.1 Introduction to String Processing | ||
84.2 Input and Output | ||
84.3 Characters | ||
84.4 String Processing | ||
84.5 Octets and Utilities for Cryptography |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パッケージ 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] | [ ? ] |
例: ファイルへのフォーマットされた印字。
(%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)$ |
streamを閉じて、もし streamが開いていたら
true
を返します。
Categories: File input · File output · Package stringproc
streamはファイルからかファイルへの開いたストリームでなかればいけません。
その時 flength
はこのファイルの中に現在存在するバイト数を返します。
例: writebyteを参照してください。
Categories: File input · File output · Package stringproc
streamをフラッシュします。 ここで streamはファイルへの出力ストリームでなければいけません。
例: writebyteを参照してください。
Categories: File output · Package stringproc
もし posが使われてないなら、 streamの中の現在位置を返します。
もし posが使われているなら、
fposition
は streamの中の位置を設定します。
posは正の数でなければいけません。
データストリームの位置は文字列やリスト同様、1から始まります。 すなわち、 streamの最初の要素は位置 1にあります。
Categories: File input · File output · Package stringproc
もし位置が行の最初でないなら
標準出力ストリームに改行を書き込み、 true
を返します。
オプション引数 streamを使うと、そのストリームに改行を書き込みます。
freshline()
が期待通りに動かない場合がいくつかあります。
newline
も参照してください。
Categories: File output · Package stringproc
現在 streamに存在するすべての文字を含む文字列を返します。 streamはオープンな文字列出力ストリームでなければいけません。 戻り値の文字は streamから取り除かれます。
例: make_string_output_streamを参照してください。
Categories: Package stringproc
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
文字を受け付ける出力ストリームを返します。 このストリームに現在存在する文字は 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
標準出力ストリームに改行を書き込みます。
オプション引数 streamを使うと、そのストリームに改行を書き込みます。
newline()
が期待通りに動かないいくつかの場合があります。
newline()
の使用の例に関しては、
sprintを参照してください。
Categories: File output · Package stringproc
fileへの文字出力ストリームを返します。
もし存在しているファイルを開いたら、
opena
は file
の終わりに要素を追加します。
バイナリ出力に関しては opena_binaryを参照してください。
Categories: File output · Package stringproc
fileへの文字入力ストリームを返します。
openr
は fileが存在すること仮定します。
バイナリ出力に関しては openr_binaryを参照してください。
Categories: File input · Package stringproc
fileへの文字出力ストリームを返します。
もし fileが存在しないなら、生成されます。
もし存在しているファイルを開いたら、
openw
は fileを破壊的に変更します。
バイナリ出力に関しては openw_binaryを参照してください。
Categories: File output · Package stringproc
制御文字列 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
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
streamの一番目の文字を取り出し、返します。
ファイルの終端になったら、 readchar
は false
を返します。
例: make_string_input_streamを参照してください。
Categories: File input · Package stringproc
streamの現在位置から行の終わりまでの文字を含む文字列か、
もしファイルの終わりが来たら false
を返します。
Categories: File input · Package stringproc
引数を順に評価し、一番左から始まる「一行」に表示します。
式は数の右隣にスペース文字と共に印字され、行の長さを無視します。
改行には 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
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] | [ ? ] |
文字は長さ 1の文字列です。
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
もし 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
もし charがアルファベット文字か数字なら true
を返します。
(対応する US-ASCII文字だけが数字とみなされます)
注意: alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
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
もし char_1と char_2が同じ文字なら true
を返します。
Categories: Predicate functions · Package stringproc
cequal
と同様ですが、文字の大小を無視します。
背後のLispが文字をアルファベット文字として認識できる時
非 US-ASCII文字で可能なだけです。
alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
もし char_1の符号位置が char_2のそれより大きいなら
true
を返します。
Categories: Predicate functions · Package stringproc
cgreaterp
と同様ですが、文字の大小を無視します。
背後のLispが文字をアルファベット文字として認識できる時
非 US-ASCII文字で可能なだけです。
alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
もし objが Maxima-文字なら true
を返します。
例えばイントロダクションを参照してください。
Categories: Predicate functions · Package stringproc
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
もし char_1の符号位置が char_2のそれより小さいなら
true
を返します。
Categories: Predicate functions · Package stringproc
clessp
と同様ですが、文字の大小を無視します。
背後のLispが文字をアルファベット文字として認識できる時
非 US-ASCII文字で可能なだけです。
alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
もし 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
対応する US-ASCII文字が数字とみなされるような場合だけ
もし charが数字なら true
を返します。
Categories: Predicate functions · Package stringproc
もし charが小文字なら true
を返します。
注意: alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
改行文字(ASCII文字 10)。
Categories: Global variables · Package stringproc
スペース文字。
Categories: Global variables · Package stringproc
タブ文字。
Categories: Global variables · Package stringproc
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 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
もし charが大文字なら true
を返します。
注意: alphacharpに関する注記を参照してください。
Categories: Predicate functions · Package stringproc
このオプション変数は 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
1文字のUTF-8エンコーディングを含む listに対応する Unicode符号位置を返します。
例: unicode_to_utf8を参照してください。
Categories: Package stringproc
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
文字列の位置インデックスは Maximaのリストと同様に 1から始まります。 charatの例を参照してください。
stringの n番目の文字を返します。 stringの一番目の文字は n = 1で返されます。
(%i1) charat("Lisp",1); (%o1) L (%i2) charlist("Lisp")[1]; (%o2) L |
Categories: Package stringproc
stringの文字すべてのリストを返します。
(%i1) charlist("Lisp"); (%o1) [L, i, s, p] |
Categories: Package stringproc
文字列 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
文字列 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
stringのコピーを新しい文字列として返します。
Categories: Package stringproc
supcaseと同様ですが、大文字を小文字に変換します。
Categories: Package stringproc
もし string_1と string_2が同じ文字の列を含むなら、
true
を返します。
Categories: Predicate functions · Package stringproc
sequal
と同様ですが、文字の大小を無視します。
背後のLispが文字をアルファベット文字として認識できる時
非 US-ASCII文字で可能なだけです。
alphacharpの注記を参照してください。
Categories: Predicate functions · Package stringproc
sexplode
は関数charlist
の別名です。
Categories: Package stringproc
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
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
位置 startから endまでのそれぞれの文字を逆順にすることを除いて stringを返します。 もし endを与えないなら、 startから stringの終わりまでのすべての文字列を置き換えます。
例:
(%i1) sinvertcase("sInvertCase"); (%o1) SiNVERTcASE |
Categories: Package stringproc
stringの中の文字の数を返します。
Categories: Package stringproc
num個の文字 charを持つ新しい文字列を返します。
例:
(%i1) smake(3,"w"); (%o1) www |
Categories: Package stringproc
string_1と string_2が異なる
string_1の最初の文字の位置、または false
を返します。
マッチングのデフォルトのテスト関数は sequal
です。
もし smismatch
が文字の大小を無視なければいけないなら、
テストとして sequalignore
を使ってください。
例:
(%i1) smismatch("seven","seventh"); (%o1) 6 |
Categories: Package stringproc
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
stringの中で charとマッチする最初の文字の位置を返します。 stringの一番目の文字は位置 1にあります。 文字の大小を無視した文字のマッチに関しては, ssearchを参照してください。
Categories: Package stringproc
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
seqとマッチする最初の文字列だけが削除されることを除いて、
sremove
同様です。
Categories: Package stringproc
stringの文字すべてが逆順の文字列を返します。
Categories: Package stringproc
文字列seqとマッチする stringの最初の部分文字列の位置を返します。
マッチのためのデフォルトのテスト関数は sequal
です。
もし ssearch
が文字の大小を無視しなければいけないなら、
テストとして sequalignore
を使ってください。
検索を限定するには startと endを使ってください。
stringの一番目の文字は位置 1にあることに注意してください。
例:
(%i1) ssearch("~s","~{~S ~}~%",'sequalignore); (%o1) 4 |
Categories: Package stringproc
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
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
oldとマッチする最初の部分文字列だけを置き換えることを除いて、
subst
と同様です。
Categories: Package stringproc
stringの両端から seqに現れるすべての文字を除いた文字列を返します。
例:
(%i1) "/* comment */"$ (%i2) strim(" /*",%); (%o2) comment (%i3) slength(%); (%o3) 7 |
Categories: Package stringproc
stringの左端だけトリムすることを除いて
strim
と同様です。
Categories: Package stringproc
stringの右端だけトリムすることを除いて
strim
と同様です。
Categories: Package stringproc
objが文字列なら true
を返します。
例はイントロダクションを参照してください。
Categories: Predicate functions · Package stringproc
位置 startで始まり位置 endで終わる stringの部分文字列を返します。 位置 endの文字は含まれません。 もし endが与えられないなら、部分文字列は文字列の残りを含みます。 stringの一番目の文字は位置 1にあることに注意してください。
例:
(%i1) substring("substring",4); (%o1) string (%i2) substring(%,4,6); (%o2) in |
Categories: Package stringproc
stringの位置 startから endまでの小文字を対応する大文字に置き換えた文字列を返します。 もし endが与えられないなら、 startから stringの終わりまでのすべての小文字が置き換えられます。
例:
(%i1) supcase("english",1,2); (%o1) English |
Categories: Package stringproc
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] | [ ? ] |
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-stringを元の文字列にデコードします。
オプション引数 return-typeを与えると
base64_decode
は代わりに対応する数やオクテットのリストを返します。
return-typeは string
か number
, list
です。
例: base64を参照してください。
Categories: Package stringproc
デフォルトでは 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
文字列か非負整数かオクテットのリストの
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
可変長の擬似乱数を返します。 デフォルトでは戻り値は 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のオクテット表現をオクテットのリストとして返します。 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のリストの中のオクテットを連結し、数を返します。
例: number_to_octetsを参照してください。
Categories: Package stringproc
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のリストを文字列にデコードします。 非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)を octetsのリストに変換します。
例: octets_to_oidを参照してください。
Categories: Package stringproc
文字列か非負整数かオクテットのリストの 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
文字列か非負整数かオクテットのリストの SHA256
フィンガープリントを返します。
デフォルトの戻り値は64ヘックス文字を含む文字列です。
オプション引数 return-typeを与えると
sha256sum
は代わりに対応する数かオクテットのリストを返します。
(sha1sumを参照してください)
例:
(%i1) string: sha256sum("foo bar baz"); (%o1) dbd318c1c462aee872f41109a4dfd3048871a03dedd0fe0e757ced57dad6f2d7 |
もし argがドイツ語のウムラウトや他の非ASCII文字(127より大きなオクテット)含むなら、
SHA256
フィンガープリントはプラットフォーム依存であることに注意してください。
Categories: Package stringproc
現在のシステムのデフォルトに従って 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.