数据工具重复行

数据工具重复行

我打算创建一个文档,其中部分文本是.csv使用软件包datatool(版本 2012/09/25 v2.11,在 debian 下手动更新)从文件条目中读取的。一切都按我想要的方式运行:

活动.csv:

"Role","Activity","NbActivity"
"Role 1","Activity A",1
"Role 1","Activity B",2
"Role 2","Activity C",3

读取以下.tex文件:

\documentclass{minimal}
\usepackage[english]{babel}
\usepackage{datatool}
\DTLloaddb[]{activities}{activities.csv}
\begin{document}
\DTLforeach{activities}
{\role=Role, \activity=Activity, \NbA=NbActivity}{
\role 
\activity \\
}
\end{document}

为了我想要创建的文档的目的,数据库的行应该按照“NbActivity”列中指示的数字进行复制,结果就像这样......

"Role","Activity","NbActivity"
"Role 1","Activity A",1
"Role 1","Activity B",2
"Role 1","Activity B",2
"Role 2","Activity C",3
"Role 2","Activity C",3
"Role 2","Activity C",3

...以便在文本中重复这些条目如下:

角色 1 活动 A

角色 1 活动 B

角色 1 活动 B

角色 2 活动 C

角色 2 活动 C

角色 2 活动 C

我尝试\DTLnewdbentry按照建议使用和循环来解决这个问题重复命令 n 次?,但就是不知道该怎么做。我是 LaTeX 编程/宏的新手,非常希望得到任何帮助,谢谢。

答案1

如果您想复制数据库中的条目,我认为唯一的方法是使用新数据库,并在您逐步浏览原始数据库时在新数据库中创建条目。以下是活动数据库(从文件中读取的原始数据库),以及活动扩展数据库其中包含您想要的重复条目:

在此处输入图片描述

笔记:

  • 我使用\DTLforeach*它来代替,因为我们处于我们正在逐步执行的 DB 的只读模式(并且速度更快)。

参考:

代码:

\documentclass{article}

\usepackage{datatool}
\usepackage{pgffor}

%\usepackage{filecontents}% <-- commented out so file does not get overwritten
\begin{filecontents*}{activities.csv}
"Role","Activity","NbActivity"
"Role 1", "Activity A", 1
"Role 1", "Activity B", 2
"Role 2", "Activity C", 3
\end{filecontents*}


\begin{document}
\DTLloaddb{activities}{activities.csv}%  Read original DB
\DTLnewdb{activitiesExpanded}%           Initialize new DB

\noindent\textbf{activities DB:}
\DTLforeach*{activities}{%
        \role=Role, \activity=Activity, \NbA=NbActivity% % <-- This percent is important
    }{%
    \par\noindent\role\ \activity 
    \dtlexpandnewvalue
    \foreach \x in {1,...,\NbA} {% Duplicate entries as desired
        \DTLnewrow{activitiesExpanded}
        \DTLnewdbentry{activitiesExpanded}{Role}{\role}
        \DTLnewdbentry{activitiesExpanded}{Activity}{\activity}
        \DTLnewdbentry{activitiesExpanded}{NbActivity}{\NbA}
    }%
}

\bigskip
\noindent\textbf{ActivitiesExpanded DB:}
\DTLforeach*{activitiesExpanded}{%
        \role=Role, \activity=Activity, \NbA=NbActivity% <-- This percent is important
    }{%
    \par\noindent\role\ \activity
}

\end{document}

相关内容