Ich habe eine CSV-Datei mit „@“ als Trennzeichen, die Daten wie diese enthält:
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
Ich muss bestimmte Daten aus der CSV-Datei abrufen und entweder die in einer bestimmten Zeile gefundenen Informationen oder die in der letzten Spalte aufgelistete Datei anzeigen.
Beispiele könnten sein:
- Seite 1 des Codes 002 anzeigen (würde 4.pdf anzeigen).
- Alle Seiten mit dem Tag „Äpfel“ anzeigen (würde 2.pdf und 4.pdf anzeigen).
- Nur das zweite vorkommende Element in der CSV-Datei mit dem Tag „Äpfel“ anzeigen (würde 4.pdf anzeigen).
- Zeigt den Titel von Seite 2, Code 1 an (würde „Kauftipps“ anzeigen).
Verfügt ConTeXt über eine Methode, um auf diese Weise Daten aus einer CSV-Datei abzurufen?
Antwort1
Sie können den Inhalt einer CSV-Datei mit dem in ConTeXt integrierten Parser analysieren rfc4180splitter
. Die von Ihnen angegebenen Beispiele könnten dann problemlos mit etwas Lua-Code umgesetzt werden. Hier zeige ich die Verwendung des Parsers, um Ihnen den Einstieg zu erleichtern. Es gibt noch viele weitere Parser inutil-prs.lua
, sollten Sie unbedingt einen Blick darauf werfen.
\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
Auf dem Terminal sehen Sie
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",
}