¿Cómo llamar líneas de datos específicas en un CSV en ConTeXt?

¿Cómo llamar líneas de datos específicas en un CSV en ConTeXt?

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",
}

información relacionada