datatool 将过滤后的数据库源复制到新的数据库目标

datatool 将过滤后的数据库源复制到新的数据库目标

请看以下示例。目标是将 AD 和 AA 的所有值作为变量名,并将相应的值放在每列中……必须对文件进行过滤,因为有更多不同的键值对(不仅仅是 AX:aa)。

\documentclass[landscape,a4paper, ngerman, 10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{datatool}
\usepackage{filecontents}

\begin{filecontents*}{c.csv}
AA:BB
AX:sdsd
AX:sdsd
AX:sdsd
AX:sdsd
AX:sdsd
AD:CC
AY:asas
AY:asas
AY:asas
AY:asas
AY:asas
AY:asas
AA:BB
AX:sdsd
AX:sdsd
AX:sdsd
AX:sdsd
AX:sdsd
AD:CC
AY:asas
AY:asas
AY:asas
AY:asas
AY:asas
AY:asas
\end{filecontents*}
\begin{document}


\DTLnewdb{tbase}
\DTLnewrow{tbase}

\DTLsetseparator{:}
\DTLloaddb[keys={ca,cb}]{dbn}{c.csv} 

\section{A}
\DTLforeach[\DTLiseq{\ca}{AA}\OR\DTLiseq{\ca}{AD}]{dbn}{\ca=ca, \cb=cb}{
\DTLifoddrow{%
    \DTLcurrentindex \ \protect\ca \ \protect\cb%
    \DTLnewdbentry{tbase}{\ca}{\cb}%     
    }%
    {%
    \protect\ca \ \protect\cb\\%
    \DTLnewdbentry{tbase}{\ca}{\cb}%
    \DTLnewrow{tbase}%
    }%
}%
\section{B}
\DTLdisplaydb{tbase}

\end{document}

我确信这是一个简单的错误......;(

答案1

我不确定我是否理解了您想要做什么。您的c.csv文件中没有标题,因此您必须使用noheader此数据库的选项。

\DTLloaddb[keys={ca,cb},noheader]{dbn}{c.csv}

请注意,默认情况下,添加到数据库的值不会扩展。因此,当您打印新数据库时,将使用tbase最后一个定义。但您可以设置扩展数据库的新值。\cb\dtlexpandnewvalue

我会\DTLnewrow{tbase}在新行真正开始之前直接使用。

    \documentclass[landscape,a4paper, ngerman, 10pt]{scrartcl}
    \usepackage[utf8]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage[T1]{fontenc}
    \usepackage{datatool}
    \usepackage{filecontents}

    \begin{filecontents*}{c.csv}
    AA:BB
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AD:CC
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    AA:BB
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AX:sdsd
    AD:CC
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    AY:asas
    \end{filecontents*}
    \begin{document}
    \DTLnewdb{tbase}
    \DTLsetseparator{:}
    \DTLloaddb[keys={ca,cb},noheader]{dbn}{c.csv} 

    \section{A}
    \DTLforeach[\DTLiseq{\ca}{AA}\OR\DTLiseq{\ca}{AD}]{dbn}{\ca=ca, \cb=cb}{%
    \dtlexpandnewvalue%
    \DTLifoddrow{%
        \DTLcurrentindex \ \ca \ \cb%
        \DTLnewrow{tbase}\DTLnewdbentry{tbase}{\ca}{\cb}%     
        }%
        {%
        \ \ca \ \cb\\%
        \DTLnewdbentry{tbase}{\ca}{\cb}%
        }%
    }%

    \section{B}
    \DTLdisplaydb{tbase}
    \end{document}

在此处输入图片描述

相关内容