如何根据上下文从 csv 文件读取变量

如何根据上下文从 csv 文件读取变量

我正在尝试从 csv 文件中读取两个变量。

function,value
1. pos,some text
2. pos,some other text

这在之前运行,我想要中\begin{document}的值和中的值。 1. pos\firstvar2. pos\secondvar编辑:value我指的是列value,而不是字符串1. pos本身。

\usepackage{csvsimple}

\newcommand{\firstvar}{tmpvalone}
\newcommand{\secondvar}{tmpvaltwo}
\csvreader[head to column names]{file.csv}{}%
{
    \ifstrequal{\function}{1. pos}
    {\renewcommand{\firstvar}{\value}}
    {
        \ifstrequal{\function}{2. pos}
        {\renewcommand{\secondvar}{\value}}
        {}
    }
}

目前存在两个问题:

  1. \ifstrequal 不起作用。我知道这与命令的扩展有关,但我无法让它工作,即使使用\expandafter\ifstrequal\expandafter
  2. 即使比较有效, 也会\renewcommand为空。我通过使用\ifnumequal{\thecsvrow}{x}而不是 来测试了这一点\ifstrequal

我感觉我已经很接近了,但是我真的不明白自己在做什么。

答案1

以下代码有效:

\documentclass{article}

\usepackage{csvsimple}

\begin{filecontents*}[overwrite]{630556.csv}
function,value
1. pos,some text
2. pos,some other text
\end{filecontents*}

\begin{document}

\newcommand{\firstvar}{tmpvalone}
\newcommand{\secondvar}{tmpvaltwo}

\csvreader[head to column names]{630556.csv}{}{
  \ifcsvstrequal{\function}{1. pos}{ \edef\firstvar{\value} } { }
  \ifcsvstrequal{\function}{2. pos}{ \edef\secondvar{\value} }{ }
}

\firstvar \quad \secondvar

\end{document}

答案2

在这里,我使用readarray软件包中的工具作为替代方案。已编辑答案。

\begin{filecontents*}{file.csv}
function,value
1. pos,some text
2. pos,some other text
\end{filecontents*}

\documentclass{article}
\usepackage{readarray,forloop}
\newcounter{loopindex}
\readarraysepchar{,}
\readdef{file.csv}\filedef
\readarray*\filedef\var[-,2]
\def\onepos{1. pos}
\def\twopos{2. pos}
\forloop{loopindex}{2}{\value{loopindex}<\numexpr\varROWS+1}{
  \arraytomacro\var[\theloopindex,1]\tmp
  \ifx\tmp\onepos\xdef\firstvar{\var[\theloopindex,2]}\fi
  \ifx\tmp\twopos\xdef\secondvar{\var[\theloopindex,2]}\fi
}
\begin{document}
``\firstvar'' and ``\secondvar''
\end{document}

在此处输入图片描述

此外,二维数组\var包含文件的所有位,\var[3,2]包含some other text,而\var[1,1]包含function,等等。

相关内容