
como posso obter todos os valores diferentes de uma coluna específica em um datatool
banco de dados? O exemplo é a seguinte tabela lida em um datatool
banco 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 datatool
ou pgffor
.
Responder1
datatool
tem uma macro chamada \DTLifinlist
que 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: