使用数据工具中的 ID(主键)循环遍历其他数据库中的值(使用 expl3?)

使用数据工具中的 ID(主键)循环遍历其他数据库中的值(使用 expl3?)

我已经为项目和人员设置了一个数据库结构。目的是将人员的 ID 作为值存储在项目数据库的列中。现在我想引用那些信息存储在不同数据库中的人员。

更新

我能够使用 获得所需信息\DTLgetvalue。对于 中的一个条目,这现在工作正常pi。但是我如何循环遍历 中存储的所有条目pi?我尝试使用clist_map_inline失败了。

梅威瑟:

\documentclass{scrbook}

\usepackage{datatool}
% ===== people database setup =======
\makeatletter
\define@key{person}{name}{\DTLnewdbentry{\crcDB}{name}{#1}}
\define@key{person}{nameFirst}{\DTLnewdbentry{\crcDB}{nameFirst}{#1}}
\makeatother
\NewDocumentCommand{\crcPersonEntry}{ m m }{
  \def\crcDB{#1}
  \DTLifdbexists{\crcDB}{}{\DTLnewdb{\crcDB}}
  \DTLnewrow{\crcDB}
  \setkeys{person}{#2}
}

% ===== project database setup
\makeatletter
\define@key{project}{name}[\DTLnewdbentry{\crcDB}{name}{}]{\DTLnewdbentry{\crcDB}{name}{#1}}
\define@key{project}{pi}[\DTLnewdbentry{\crcDB}{pi}{}]{\DTLnewdbentry{\crcDB}{pi}{#1}}
\makeatother
\NewDocumentCommand{\crcProjectEntry}{ m m }{
  \def\crcDB{#1}
  \DTLifdbexists{\crcDB}{}{\DTLnewdb{\crcDB}}
  \DTLnewrow{\crcDB}
  \setkeys{project}{#2}
}

\ExplSyntaxOn
% Use: \getProject{<id>}

\NewDocumentCommand{\getPIs}{m}{%
\clist_map_inline:Nn {#1}{%
  \DTLgetvalue{\thePI}{##1}{1}{\dtlcolumnindex{##1}{nameFirst}}\thePI\space
  \DTLgetvalue{\thePI}{##1}{1}{\dtlcolumnindex{##1}{name}}\thePI
}}

\NewDocumentCommand{\getProject}{m}{%
  \DTLgetvalue{\theProjectName}{#1}{1}{\dtlcolumnindex{#1}{name}}\theProjectName-\space
  \DTLgetvalue{\thePIlist}{#1}{1}{\dtlcolumnindex{#1}{pi}}(\thePIlist)\space
\getPIs{\thePIlist}
}

 \ExplSyntaxOff


\begin{document}
\crcProjectEntry{project1}{
  name={My Project},
  pi={person1, person2}
}
\crcProjectEntry{project2}{
  name={My other Project},
  pi={person3}
}

\crcPersonEntry{person1}{
  name={Perssonos},
  nameFirst={Peter}
}

\crcPersonEntry{person2}{
  name={Holgersson},
  nameFirst={Agnes}
}

\crcPersonEntry{person3}{
  name={Ickstein},
  nameFirst={Paula}
}



%\getProject{project1} % --> My Project, Peter Perssonos, Agnes Holgersson

\getProject{project2} % -> My other Project, Paula Ickstein

\end{document}

这就是目前的结果。

在此处输入图片描述

相关内容