Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian dataviewのdv.io.csv()とは何か

csvファイルを読み込む関数。 まず、どういう構造なのか、捕まえてみましょう。

data.md

データを用意します。

チーム,勝ち,負け
阪神, 25, 14
DeNA, 22, 15
巨人, 21, 20
広島, 20, 20
ヤクルト,17, 22
中日, 13, 27

拡張子はmdのままで大丈夫。

データ構造

dv.io.csv()でこのdata.mdを読み込んでみます。

```dataviewjs
d = await dv.io.csv("data.md")
s = JSON.stringify(d)
dv.paragraph(s)
```

実データはvaluesキーに格納されていました。

CSView.md

valuesからデータを読み取りテーブルにします。

```dataviewjs
d = await dv.io.csv("data.md")
k = Object.keys(d.values[0])
a = d.values.map(x => [ x[k[0]], x[k[1]], x[k[2]] ])
dv.table(k, a)
```

どうもこれが基本形。

問題点

data.mdは相対パスで指定すること。 assetsフォルダにあるなら "assets/data.md"。

data.mdの1行目がテーブル・ヘッダーになります。 このとき、カンマの前後にスペースをつけるとややこしくなる。 引用符で囲めば回避できるようだけど。

また、テーブル・ヘッダーに英語を使うと小文字のヘッダーも追加されます。 データを抜き出しやすくする工夫なのだろうけど、表がズレる。

まとめ

項目数を可変にしようとすると簡単に書けない。 ヘンだなあ。

追記

お風呂に入ってて思いついた。可変型。

```dataviewjs
d = await dv.io.csv("data.md")
k = Object.keys(d.values[0])
a = d.map(x => Object.values(x))
dv.table(k, a)
```

エウレカ! どんなcsvファイルにも対応できます。

追記2

キーがわかっている場合は下記でも良かった。

```dataviewjs
d = await dv.io.csv("data.md")
dv.table(["チーム","勝ち","負け"],
  d.map(x => [x.チーム, x.勝ち, x.負け]))
```