Получить все различные значения определенного столбца в базе данных DataTool

Получить все различные значения определенного столбца в базе данных DataTool

как я могу получить все различные значения определенного столбца в datatoolбазе данных? Примером может служить следующая таблица, считанная в datatoolбазу данных:

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

Теперь я хотел бы получить список всех городов ( Xcity, Ytown,Ztington) в этой базе данных и всех возрастов ( 20,30,40) в этой базе данных без дубликатов, который я могу сохранить в макросе/чем-то еще для повторного использования позже с помощью datatoolили pgffor.

решение1

datatoolимеет макрос, \DTLifinlistкоторый может проверить, находится ли элемент в указанном списке, разделенном запятыми, поэтому его можно использовать при построении списка всех городов или возрастов, например так:

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

Результат:

Полученное изображение

Связанный контент