Skip to content

Instantly share code, notes, and snippets.

@you21979
Last active August 29, 2015 14:04
Show Gist options
  • Save you21979/02cae1b2e10b80363035 to your computer and use it in GitHub Desktop.
Save you21979/02cae1b2e10b80363035 to your computer and use it in GitHub Desktop.
csvとはなんだろ

CSVとはなんだ

カンマ区切りのフォーマットだがそんなのはどうでもいい。どういうパターンがあるか
フリーフォーマットなCSVを人間がどういう使い方をしているか。

決め事がなくファイルだけ渡された時にわかること

  • 配列を扱う
  • 不変である
  • 型がない

フィールド名(column)が決まっている場合

  • オブジェクトの配列
  • 識別できるIDがある
  • フィールドごとに明確な型がある
  • あるフィールド~あるフィールドまで配列のこともある

フィールド名(column)が決まっていない場合

  • 値の配列(行列)
  • フィールドすべて同じ型である

できることのパターン

  • オブジェクトの配列
  • 2次元配列

扱いにくいパターン

  • オブジェクト表現の時に同じフィールドに違う型のデータが格納される場合(UNION)
  • オブジェクト表現の時に空白がある場合(NULL)
  • 行ごとにフィールド数が可変の場合

決め事を作るのに必要な定義

共通

  • コメントの扱い(行頭にシャープなど)
  • 読み飛ばす行数(コメントをデータに定義すればいらないはず)

オブジェクトの場合

  • オブジェクトの名前
  • フィールドの名前、型などの属性情報
  • 識別用フィールド名

行列の場合

  • 配列数
  • 型情報

型情報

  • uint8
  • uint16
  • uint32
  • uint64
  • int8
  • int16
  • int32
  • int64
  • float
  • double
  • string
  • enum

フィールド属性

  • array
  • validation

##その他

  • 実際には経験値テーブルなど行列に見えてもオブジェクト表現であることが多い
  • 枠にハマるものハマらないもの分けて扱ったほうがよいし枠にハマらないものは違うフォーマットを検討するべき(XMLやJSONなど)
  • 型情報は整数であれば桁情報からつくるべきであろうか
  • 型情報は事前にバリデーション含めて宣言するべきであろうか(typedefのような)

格納

  • 列指向

オブジェクト

  • 行指向

配列

格納後lookup

列指向ならview?
行指向なら配列?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment