Obtenha todos os valores diferentes de uma coluna específica em um banco de dados datatool

Obtenha todos os valores diferentes de uma coluna específica em um banco de dados datatool

como posso obter todos os valores diferentes de uma coluna específica em um datatoolbanco de dados? O exemplo é a seguinte tabela lida em um datatoolbanco de dados:

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

Agora eu gostaria de obter uma lista de todas as cidades ( Xcity, Ytown,Ztington) nesse banco de dados e de todas as idades ( 20,30,40) nesse banco de dados sem duplicatas, que eu possa armazenar em macro/qualquer coisa para reutilizar mais tarde com datatoolou pgffor.

Responder1

datatooltem uma macro chamada \DTLifinlistque pode verificar se um elemento está na lista separada por vírgulas fornecida, então isso pode ser usado ao construir uma lista de todas as cidades ou idades, assim:

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

Imagem resultante

informação relacionada