在句子中使用 csvreader

在句子中使用 csvreader

我正在使用 csvreader 进行动态报告。

我想使用 csvreader 函数从特定单元格调用值,例如:

Thank you \csvreader[head to column names, filter={\thecsvinputline=2}]{sample.csv}{}{\csvcolii} \csvreader[head to column names, filter={\thecsvinputline=2}]{sample.csv}{}{\csvcoliii.}

写“谢谢马克·史密斯”

其中 sample.csv 包含例如:

Name,LastName
Mark,Smith
x,y
a,b

如果我这样做,我实际上会得到:“谢谢您,姓氏史密斯”

这些信息不一定位于 csv 文件的同一行......

关于如何修复此问题或者采取不同做法,您有什么想法吗?

谢谢你! :)

答案1

您可以查看 csvsimple 包中的示例https://www.ctan.org/pkg/csvsimple

\csvnames{我的名字}{Name=\surname,LastName=\givenname}

\csvreader[我的名字,行后延迟=\\,最后一行后延迟=]%
  {示例.csv}{}{%
    谢谢 \givenname\ \surname\ %出生于 \birthyear\ 并且住在 \address。
}

因此您需要直接使用标题字符串并将其放入变量中,然后就可以轻松使用它。

答案2

这里有一种方法readarray

\documentclass{article}
\usepackage{readarray}
\begin{filecontents*}{sample.csv}
Name,LastName
Mark,Smith
x,y
a,b
\end{filecontents*}
\newcommand\fullname[1]{\edef\tmp{\the\numexpr#1+1\relax}%
  \sample[\tmp,1] \sample[\tmp,2]}
\begin{document}
\readarraysepchar{,}
\readdef{sample.csv}\sampledata
\readarray\sampledata\sample[,2]

Thank you, \fullname{1}.

Third name is \fullname{3}.
\end{document}

在此处输入图片描述

答案3

另一种解决方案是使用datatool

\documentclass{article}
\usepackage{datatool}
\begin{filecontents*}{sample.csv}
    Name,LastName
    Mark,Smith
    x,y
    a,b
\end{filecontents*}
\DTLloaddb{data}{sample.csv}

\newcommand\fullname[1]{%
    \DTLassign{data}{#1}{\dbName=Name,\dbLastName=LastName}%
    \dbName~{\scshape\dbLastName}%
}

\begin{document}
    Thank you, \fullname{1}.
    
    Third name is \fullname{3}.
\end{document}

相关内容