
データベース内の特定の列のすべての異なる値を取得するにはどうすればよいですか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}
結果: