如何从 datatool DB 中挑选数据并计算总数

如何从 datatool DB 中挑选数据并计算总数

我有一个包含当前价格/商品的 CSV 文件。这些价格会定期更新。

我已经加载了一个数据库datatool。我想使用这些价格根据我的 LaTeX 文件中的数量来计算总数。

price.csv的如下:

item, price
A, 0.1
B, 0.03
C, 1.2

现在我想要一个表格,其中包含我的数量和总数,如下所示:

Item     Quantity     Total

 A        100          10   
 B        5            0.15 
 C        1            1.2

 Total    106          11.53

所有总数都经过计算,因为值往往price.csv会发生变化。

答案1

datatool提供了许多函数来访问和处理数据库内容。使用以下函数可以轻松执行计算:fp-符号:

在此处输入图片描述

\documentclass{article}
\usepackage{datatool,filecontents}% http://ctan.org/pkg/{datatool,filecontents}

\newcommand{\resetgrandtotals}{\gdef\grandtotal{0}\gdef\totalcount{0}}
\newcommand{\itemtotal}[2]{% \itemtotal{<item>}{<quantity>}
  \DTLgetvalueforkey{\result}{price}{price}{item}{#1}% Extract data from database
  \FPeval\result{trunc(\result*#2:2)}\result% Calculate total & display
  \FPeval\totalcount{trunc(\totalcount+#2:0)}% Add to total count
  \FPeval\grandtotal{trunc(\grandtotal+\result:2)}% Add to grand total
  \xdef\grandtotal{\grandtotal}% Make definition global
  \xdef\totalcount{\totalcount}% Make definition global
}
\newcommand{\itemprice}[1]{% \itemprice{<item>}
  \DTLgetvalueforkey{\result}{price}{price}{item}{#1}\result% Extract data from database
}
\begin{filecontents*}{price.csv}
item, price
A, 0.1
B, 0.03
C, 1.2
\end{filecontents*}
\begin{document}
\DTLloaddb{price}{price.csv}% Load database
\DTLdisplaydb{price}% Display database

\resetgrandtotals
\begin{tabular}{lrr}
  Item  &    Quantity & Total \\
  \hline
  A     &         100 & \itemtotal{A}{100} \\ % 10.00
  B     &           5 & \itemtotal{B}{5}   \\ %  0.15
  C     &           1 & \itemtotal{C}{1}   \\ %  1.20
  Total & \totalcount & \grandtotal           % 11.53
\end{tabular}

The price associated with~B is \itemprice{B}.
\end{document}

上述 MWE 提供了\itemtotal{<item>}{<quantity>}根据数量和价格(后者使用 从数据库中提取\DTLgetvalueforkey)打印商品总数的功能。此外,它还会计算\totalcount\grandtotal以供稍后在表格中使用。\itemprice{<item>}用作的包装器以\DTLgetvalueforkey返回与商品相关的价格<item>

需要重置总数,并使用 实现\resetgrandtotals

相关内容