使用 Datatool 从 csv 中检索特定值并将它们相除

使用 Datatool 从 csv 中检索特定值并将它们相除

因此,我正在加载一个如下所示的 csv 文件:

est;dens;mwp
ols11;0.1;.
ols12;0.09;0.001

我想使用以下代码来除以两个数字。我在表格中使用 .csv,但我也在文本中引用它们,并希望此操作可以自动化。但是我从代码中得到以下错误:Missing number, treated as zero.对于行\basiceval{\x/\y}。我对在 LaTex 中评估数字不是很有经验,所以任何帮助都将不胜感激!

\documentclass{article}

\usepackage{datatool}
\DTLsetseparator{;}
\DTLloaddb{mun_reg}{63_mun_result.csv}
\def\basiceval#1{\the\numexpr#1\relax}

\begin{document}
\def\x{\DTLfetch{mun_reg}{est}{ols11}{dens}}
\def\y{\DTLfetch{mun_reg}{est}{ols12}{dens}}
\basiceval{\x/\y}

\end{document}

答案1

问题中的方法存在两个问题:首先\numexpr执行整数除法,因此不能将其用于 0.1/0.09;其次,语句\DTLfetch未在中展开\def,因此您本质上是尝试将一个(非常复杂的)宏除以另一个宏,而不是像您期望的那样除以两个数字。

要对十进制数进行计算,datatool有一些内置的数学函数,其中包括\DTLdiv(用于除法)。这些函数的输入应该是一个保存值的宏,结果也存储在宏中。要将数据库值存储在宏中,您可以使用\DTLgetvalueforkey而不是\DTLfetch。请注意,\DTLgetvalueforkey列和行规范的顺序是不同的(首先是要查找值的列,然后是参考列和行)。

有关数学函数的更多信息,您可以阅读手动的,特别是第 24 页及以后。

梅威瑟:

\documentclass{article}
\usepackage{datatool}
\DTLsetseparator{;}
\DTLloaddb{mun_reg}{63_mun_result.csv}

\begin{document}
\DTLgetvalueforkey{\myx}{dens}{mun_reg}{est}{ols11}
\DTLgetvalueforkey{\myy}{dens}{mun_reg}{est}{ols12}
\DTLdiv{\mydiv}{\myx}{\myy}
Result: \mydiv
\end{document}

相关内容