
как я могу получить все различные значения определенного столбца в 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}
Результат: