"@"을 구분 기호로 사용하고 다음과 같은 데이터가 포함된 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가 표시됨).
- "사과" 태그가 있는 모든 페이지를 표시합니다(2.pdf 및 4.pdf 표시).
- CSV에서 "apples" 태그가 있는 두 번째 항목만 표시합니다(4.pdf로 표시됨).
- 2페이지의 제목, 코드 1을 표시합니다("구매 팁"이 표시됨).
ConTeXt에는 CSV 파일에서 이러한 방식으로 데이터를 호출하는 방법이 있습니까?
답변1
ConTeXt에 내장된 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",
}