Eu tenho um arquivo CSV, usando "@" como delimitador, contendo dados como este:
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
Preciso chamar dados específicos do arquivo CSV, seja exibindo informações encontradas em uma linha específica ou exibindo o arquivo que está listado na última coluna.
Exemplos podem ser:
- Exiba a página 1 do código 002 (mostraria 4.pdf).
- Exiba todas as páginas com a tag "maçãs" (mostraria 2.pdf e 4.pdf).
- Exiba apenas o segundo item ocorrido no CSV que possui a tag "maçãs" (mostraria 4.pdf).
- Exiba o título da página 2, código 1 (mostraria "Dicas de Compra").
O ConTeXt possui algum método para chamar dados dessa forma a partir de um arquivo CSV?
Responder1
Você pode analisar o conteúdo de um arquivo CSV com o arquivo rfc4180splitter
. Os exemplos que você dá podem ser facilmente obtidos usando algum código Lua. Aqui mostro o uso do analisador para você começar. Existem muitos outros analisadores encontrados emutil-prs.lua
, você definitivamente deveria dar uma olhada.
\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
No terminal você verá
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",
}