Kaleidoxはレコードを記述するRecordというデータ型を提供しています。
このRecordをテキストとして入出力するためのテキストフォーマットとしてLXSVを開発しました。LXSVを使うことでkaleidoxプログラム内でRecordをリテラルとして記述できます。
LXSVはLTSV(Labeled Tab-separeted Values)的なフォーマットを拡張したもので以下の特徴があります。
- Kaleidoxプログラム内でリテラルとして記述可能
- LTSVの概ね上位互換
- 区切り記号を選択することができる
LXSVフォーマット
LXSVはUnicodeによるテキストフォーマットで区切り記号によってキーと値の対の列によるレコードと、改行コードで区切られたレコードの列を表現できます。
例えば以下のようなテキストがLXSVです。
name:Taro,city:Yokohama name:Hanako,city:Kawasaki
このテキストではキーと値の対の区切り記号として「:」、キーと値の対の間の区切り記号として「,」を用いています。
キーと値の対の区切り記号は「:」固定ですが、キーと値の対の間の区切り記号は以下のルールによって決められます。
- TAB、SPACE、「,」、「;」の中で最初に登場した文字を区切り記号とする。
このため以下のLXSVはすべて同じデータ構造を記述しています。
区切り記号: TAB
name:Taro city:Yokohama name:Hanako city:Kawasaki
区切り記号: SPACE
name:Taro city:Yokohama name:Hanako city:Kawasaki
区切り記号: ,
name:Taro,city:Yokohama name:Hanako,city:Kawasaki
区切り記号: ;
name:Taro;city:Yokohama name:Hanako;city:Kawasaki
区切り記号の入力
値の中にTAB, SPACE, 「,」, 「;」といった区切り記号を入れたい場合、以下の3つの方法があります。
- 区切り記号の使い分け
- 「"」で囲んで文字列として記述する。
区切り記号の使い分け
区切り記号を可変にしている理由の1つは区切り記号を値に入れたい場合の文字エスケープを回避することを可能にするためです。
name:Taro;city:Yokohama,Kawasaki name:Hanako;city:Kawasaki,Yokohama
たとえば以下のように値の中に値の列を記述することも可能になります。ここではLXSVの区切り記号に「;」を使っています。そして、値の中の区切り記号に「,」を使っています。
name:Taro;city:Yokohama,Kawasaki name:Hanako;city:Kawasaki,Yokohama
文字列
値の中にTAB, SPACE, 「,」, 「;」といった区切り記号を入れたい場合には、前述したように別の区切り記号を使うのが有効ですが、別の方法として「"」を使って文字列を指定することもできます。
name:Taro;city:"Yokohama,Kawasaki" name:Hanako;city:"Kawasaki,Yokohama"
「"」を使って文字列を記述する場合は、「\n」や「\r」といったエスケープ文字を使って文字列に制御文字を入れることができます。また「”」の文字列内に「"」を入れる場合は「\"」として「\」を使ってエスケープします。
name:Taro;city:"Yokohama\nKawasaki"
name:Hanako;city:"Kawasaki\"Yokohama"
LXSVリテラル
Kaleidoxではレコードを記述するRecordというデータ型を提供しています。このRecordをリテラルとして記述する時にLXSVを用います。
kaleidox> name:Taro,city:Yokohama name:Taro,city:Yokohama
kaleidox> :show Record[2] name:Taro,city:Yokohama
文字列リテラルでの入力
Recordを文字列に対する修飾を使って入力することができます。文字列に対する修飾は文字列リテラルの前に修飾を示すプレフィックスを指定します。Recordの場合は「record」です。
以下のように使用します。
kaleidox> record"name:Taro,city:Yokohama" name:Taro,city:Yokohama
kaleidox> :show Reord[2] name:Taro,city:Yokohama
KaleidoxではLXSVのデータ型も用意されています。このデータ型を使う場合には修飾を示すプレフィックスとして「lxsv」を指定します。
kaleidox> lxsv"name:Taro,city:Yokohama" name:Taro,city:Yokohama
kaleidox> :show Lxsv[2] name:Taro,city:Yokohama
まとめ
Recordを使用するための前提となるLXSVについてご紹介しました。
次回はRecordの具体的な使い方について説明する予定です。
諸元
- Kaleidox : 0.1.6