ConTeXt で CSV 内の特定のデータ行を呼び出すにはどうすればよいでしょうか?

ConTeXt で CSV 内の特定のデータ行を呼び出すにはどうすればよいでしょうか?

区切り文字として「@」を使用し、次のようなデータを含む CSV ファイルがあります。

 Code     @ Title        @ Page     @ Tags                    @ File
 001      @ Buying Tips  @ 1        @ seafood, fish, octopus  @ 1.pdf
 001      @ Buying Tips  @ 2        @ oranges, apples         @ 2.pdf
 001      @ Buying Tips  @ 3        @ bananas                 @ 3.pdf
 002      @ Food Waste   @ 1        @ compost, apples         @ 4.pdf
 002      @ Food Waste   @ 2        @ plastic, paper, bags    @ 5.pdf

CSV ファイルから特定のデータを呼び出して、特定の行にある情報を表示するか、最後の列にリストされているファイルを表示する必要があります。

例:

  • コード 002 のページ 1 を表示します (4.pdf が表示されます)。
  • 「apples」というタグが付いたすべてのページを表示します(2.pdf と 4.pdf が表示されます)。
  • CSV 内でタグ「apples」を持つ 2 番目に出現する項目のみを表示します (4.pdf が表示されます)。
  • ページ 2、コード 1 のタイトルを表示します (「購入のヒント」と表示されます)。

ConTeXt には、CSV ファイルからこのような方法でデータを呼び出す方法がありますか?

答え1

ConTeXtの組み込みの を使ってCSVファイルの内容を解析することができますrfc4180splitter。あなたが挙げた例は、Luaコードを使って簡単に実現できます。ここでは、パーサーの使い方を紹介します。他にもたくさんのパーサーがあります。util-prs.luaぜひ一度見てみてください。

\startbuffer[csv]
Code     @ Title        @ Page     @ Tags                    @ File
001      @ Buying Tips  @ 1        @ seafood, fish, octopus  @ 1.pdf
001      @ Buying Tips  @ 2        @ oranges, apples         @ 2.pdf
001      @ Buying Tips  @ 3        @ bananas                 @ 3.pdf
002      @ Food Waste   @ 1        @ compost, apples         @ 4.pdf
002      @ Food Waste   @ 2        @ plastic, paper, bags    @ 5.pdf
\stopbuffer

\startluacode
local csvsplitter = utilities.parsers.rfc4180splitter{separator = "@"}
local rows, colnames = csvsplitter(buffers.getcontent"csv", true)

-- Show what has been parsed on the terminal
inspect(rows)
inspect(colnames)

-- Now pick data and process to your liking
-- ...
\stopluacode

\starttext

\stoptext

ターミナルでは

table={
 { "001      ", " Buying Tips  ", " 1        ", " seafood, fish, octopus  ", " 1.pdf" },
 { "001      ", " Buying Tips  ", " 2        ", " oranges, apples         ", " 2.pdf" },
 { "001      ", " Buying Tips  ", " 3        ", " bananas                 ", " 3.pdf" },
 { "002      ", " Food Waste   ", " 1        ", " compost, apples         ", " 4.pdf" },
 { "002      ", " Food Waste   ", " 2        ", " plastic, paper, bags    ", " 5.pdf" },
}
table={
 "Code     ",
 " Title        ",
 " Page     ",
 " Tags                    ",
 " File",
}

関連情報