Tengo un archivo CSV, que utiliza "@" como delimitador, y que contiene datos 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
Necesito llamar datos específicos del archivo CSV, ya sea mostrando la información que se encuentra en una línea específica o mostrando el archivo que está en la lista en la última columna.
Ejemplos podrían ser:
- Muestra la página 1 del código 002 (mostraría 4.pdf).
- Muestra todas las páginas con la etiqueta "manzanas" (mostraría 2.pdf y 4.pdf).
- Muestre solo el segundo elemento que aparece en el CSV que tiene la etiqueta "manzanas" (mostraría 4.pdf).
- Muestre el título de la página 2, código 1 (mostraría "Consejos de compra").
¿Tiene ConTeXt algún método para llamar datos de esa manera desde un archivo CSV?
Respuesta1
Puede analizar el contenido de un archivo CSV con el archivo rfc4180splitter
. Los ejemplos que da podrían lograrse fácilmente utilizando algún código Lua. Aquí muestro el uso del analizador para comenzar. Hay muchos más analizadores encontrados enutil-prs.lua
, definitivamente deberías echarle un vistazo.
\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
En la terminal verás
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",
}