Obtener todos los valores diferentes de una columna específica en una base de datos de herramientas de datos

Obtener todos los valores diferentes de una columna específica en una base de datos de herramientas de datos

¿Cómo puedo obtener todos los valores diferentes de una columna específica en una datatoolbase de datos? Un ejemplo es la siguiente tabla leída en una datatoolbase de datos:

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

Ahora me gustaría obtener una lista de todas las ciudades ( Xcity, Ytown,Ztington) en esa base de datos y de todas las edades ( 20,30,40) en esa base de datos sin duplicados, que puedo almacenar en macro/lo que sea para reutilizar más tarde con datatoolo pgffor.

Respuesta1

datatooltiene una macro llamada \DTLifinlistque puede verificar si un elemento está en la lista separada por comas dada, por lo que se puede usar al construir una lista de todas las ciudades o edades, como esta:

\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}

Resultado:

Imagen resultante

información relacionada