Alle unterschiedlichen Werte einer bestimmten Spalte in einer Datatool-Datenbank abrufen

Alle unterschiedlichen Werte einer bestimmten Spalte in einer Datatool-Datenbank abrufen

Wie kann ich alle unterschiedlichen Werte einer bestimmten Spalte in einer datatoolDatenbank abrufen? Beispiel: Die folgende Tabelle wird in eine datatoolDatenbank eingelesen:

Name,Town,Age
Adam,Xcity,20
Berta,Ytown,30
Cesar,Ztington,40
Dora,Ztington,20
Emil,Ytown,30
Franz,Ytown,20

Jetzt möchte ich eine Liste aller Städte ( Xcity, Ytown,Ztington) und aller Altersgruppen ( 20,30,40) in dieser Datenbank ohne Duplikate erhalten, die ich in einem Makro/was auch immer speichern kann, um sie später mit datatooloder wiederzuverwenden pgffor.

Antwort1

datatoolverfügt über ein Makro namens \DTLifinlist, das prüfen kann, ob ein Element in der angegebenen, durch Kommas getrennten Liste enthalten ist. Dies kann daher beim Erstellen einer Liste aller Städte oder Altersgruppen wie folgt verwendet werden:

\documentclass{article}

\usepackage{etoolbox}
\usepackage{datatool}

\begin{filecontents}{test.csv}
Name,Town,Age
Adam,Xcity,20
Berta,Ytown,30
Cesar,Ztington,40
Dora,Ztington,20
Emil,Ytown,30
Franz,Ytown,20
\end{filecontents}

\DTLloaddb{data}{test.csv}

\begin{document}

\newcommand*{\uniquetowns}{}
\newcommand*{\uniqueages}{}

\DTLforeach*{data}{\Town=Town,\Age=Age}{%
  \expandafter\DTLifinlist\expandafter{\Town}{\uniquetowns}%
  {}% do nothing, already in list
  {% add to list
    \ifdefempty{\uniquetowns}%
    {\let\uniquetowns\Town}% first element of list
    {% append to list
      \eappto\uniquetowns{,\Town}%
    }%
  }%
  % Similarly for age
  \expandafter\DTLifinlist\expandafter{\Age}{\uniqueages}%
  {}% do nothing, already in list
  {% add to list
    \ifdefempty{\uniqueages}%
    {\let\uniqueages\Age}% first element of list
    {% append to list
      \eappto\uniqueages{,\Age}%
    }%
  }%
}

List of unique towns: \uniquetowns.

List of unique ages: \uniqueages.
\end{document}

Ergebnis:

Resultierendes Bild

verwandte Informationen