profaim  >  profaim.base 技術資料  >  データ仕様  >  長さ情報 CSV

長さ情報 CSV

記載日:2006/02/07 更新日:2006/02/08

CSV の課題

CSV の欠点としては、編集可能なテキスト形式であるためどうしても扱えない文字が発生してしまいます。(詳しくは、関連記事 CSV 形式 を参照)

この扱えない文字による制約が、CSV として扱うデータが想定できる場合は問題ないのですが、掲示板の書き込みなど扱えるデータに制限を持たせたくない場合には問題になってきます。

データ長を考慮した CSV

CSV の扱うデータはテキスト形式であるため文字列です。そこで文字列長も合わせて記録しておくことで、CSV中にカンマ(,)が出てきたとしても、それがデータ中のカンマであるのか、データを区切るカンマであるのかが明確になります。

そもそもデータの文字列長を押さえておけば、データ区切りのカンマを除くこともできますが、テキストエディタで開いた場合に、どこがデータ区切り位置かわからなくなってしまうので不適切だと思います。

長さ情報 CSV

その結果考えたのが「長さ情報 CSV 形式(LCSV)」です。 長さ情報 CSV 形式でデータを表現すると下記のようになります。

4:[0001],3:[CSV],11:[カンマ,区切りテキスト],7:[General]
4:[0002],4:[LCSV],16:[長さ情報付きカンマ区切りテキスト],7:[profaim]
4:[0003],0:[],0:[],0:[]
4:[0004],4:[TEXT],9:[通常のテキスト形式],7:[General]

長さ情報 CSV では、1つのデータを「n:[X]」の形式で表現します。X にはデータ文字列が入り、そのデータ文字列の文字列長(純粋な文字数)が n に入ります。これらをカンマで区切り1レコードのデータを1行で表現します。

例えば、1行目の1番目は「0001」というデータです。これは4バイトであるため、長さ情報 CSV としては 「4:[0001]」と表します。

これに習うと、1行目のデータは「0001」、「CSV」、「カンマ,区切りテキスト」、「General」という4つのデータで構成されていることが読み取れます。

CSV として重視した点

すべてのテキストデータを扱えることはもちろんですが、CSV である以上、やはりテキストエディタでの表示/編集を可能とする方向で考えました。

そのためテキストデータへのエンコードは行っていません。また、単に長さを持たせるだけなら下記のいずれの形式でも問題ないのですが、あえてデータ長とデータとの区切りは「:」、データは「[」と「]」で囲むようにしました。

下の行に進むにつれ無駄な記号は省かれていきますが、同時にデータの区切りが不明確になってしまうことがわかると思います。そのためデータ長は増えてしまいますが、読みやすく編集しやすい1番上の形式を採用したというわけです。

4:[0001],3:[CSV],11:[カンマ,区切りテキスト],7:[General]
4:0001,3:CSV,11:カンマ,区切りテキスト,7:General
40001,3CSV,11カンマ,区切りテキスト,7General
400013CSV11カンマ,区切りテキスト7General

ちなみにこの「長さ情報 CSV」という名前。profaim.base で勝手に名づけたものです。名前もデータ形式も世間一般的に(今のところ)存在しなければ通じもしない言葉なので注意してください・・。