Jazzと読書の日々

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

ObsidianでCSVをテーブルに変換する

反対に、MarkdownのテーブルはCSVに変換する。

CSViewer

CSVをデータベースとして活用できるようになったので、CSVを作る仕組みを考えてみました。 テーブルを使えば楽ですよね。 テーブルの機能も強化されたことだし。

そんなこんなでTemplaterスクリプトです。

使い方

実はスペース区切りにも対応しています。 ということでデータに空白を挟んで並べてしまう。 空白はいくら並べても構いません。

年表   出来事
1947   国連パレスチナ分割決議案を採択
1948   イスラエル独立宣言
... ...

そしてスクリプトを実行すると表形式に変換されます。 カーソルの位置をもとに、前後をデータと見なします。 範囲選択はしないでください。 空行に挟まれた範囲だけ変換。 なので文中に埋め込むときも、スペース区切りで下書きすれば表に変換できます。

さらにスクリプトを実行すればCSV形式になります。 MarkdownCSVがトグルで、実行ごとにぐるぐる回る。 あたかもあざなえる縄の如し。

Style Settings プラグインで Table のフォントサイズやデザインを変更しておくと、テーブルの見た目も引き締まります。

C2T.md

スクリプトは下記のようになります。

<%*
e = app.workspace.activeLeaf.view.editor
pos = e.getCursor().line
if(pos==0) pos = 1
block = tp.file.content.split("\n\n")
for(i=j=0; i<block.length && j<pos; i++)  j+= block[i].split("\n").length
s = block.splice(i-1, 1).toString().trim()
if(s[0]=="|"){
  s = s.replace(/\|/mg, ",").replace(/^,(.+),$/mg, "$1")
  bar = s.split("\n")
  bar.splice(1, 1)
  s = bar.join("\n")
}else{
  s = s.replace(/[ ,\t]+/mg, "|").replace(/^(.+)$/mg, "|$1|")
  bar = "\n" + s.split("\n")[0].replace(/[^|]+/g, "---") + "\n"
  s = s.replace(/\n/, bar)
}
block.splice(i-1, 0, s)
s = block.join("\n\n")
e.setValue(s)
e.setCursor(pos, 0)
%>

先頭が | だとテーブル、って決めうちなので省力化されてる。

ご注意

Templaterのバージョンが上がって最初からアイコンが付くようになりました。 それはいいんだけどCommanderが対応してないので、アイコンの変更ができなくなってます。

まずいなあ。 ツールバーに同じアイコンが並んで区別できないや。

まとめ

データの下書きにスペース区切りはオススメ。