我有两个表..一个包含具有值的属性,例如
Name percentage
Atr1 80
Atr2 20
Atr3 50
另一个包含该属性的工具
Attribute Tool
Atr1 SK
Atr1 SL
Atr2. UP
Atr3 SK
我需要从表 1 中的前两个属性中获取一个工具列表,但是如果每个属性都有相同的工具,则该列表必须是唯一的。
第一个表中前两个属性(Atr1 和 Atr3)的工具是
SK
SL
SK
我需要删除多余的 SK,这样列表才会像这样
SK
SL
这是我目前得到的。
\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\usepackage{ifthen}
\usepackage{etoolbox}
\begin{filecontents*}{tools.dat}
Name Abbreviation
Tool1 SL
Tool2 SK
Tool3 UP
\end{filecontents*}
\begin{filecontents*}{tabletools.dat}
Attribute Tool
SV CA
SV MC
BK PT
BK PR
MI SP
MI MC
Inter SL
Inter SK
Intra MC
Intra MS
VL AA
VL MC
LM LC
LM ME
N SS
N MC
R MC
R GB
I LC
I CA
A UP
A SL
S SK
S AP
E SM
E MC
C MC
C CA
\end{filecontents*}
\begin{filecontents*}{topstyles.dat}
Name Abbreviation percentage
Inter Inter 0
Music MI 0
S-Visual SV 0
V-Linguistic VL 5
B-Kinesthetic BK 0
Intraper Intra 0
Logic-Math LM 20
Natural N 10
\end{filecontents*}
\begin{document}
\pgfplotstableread[columns={Name,Abbreviation,percentage}]{topstyles.dat}\datatableA
\pgfplotstablesort[sort key={percentage}, sort cmp=int >]{\datatablesorted}{\datatableA}
\pgfplotstablegetrowsof{\datatablesorted}
\pgfplotstablegetelem{0}{Abbreviation}\of{\datatablesorted}
\edef\topworkabbr{\pgfplotsretval}
\pgfplotstableread[columns={Attribute,Tool}]{tabletools.dat}\datatableB
\pgfplotstablegetrowsof{\datatableB}
\pgfmathtruncatemacro{\RowsInTable}{\pgfplotsretval-1}
\foreach \k in {0,...,\RowsInTable}{
\pgfplotstablegetelem{\k}{Attribute}\of{\datatableB}
\edef\itest{\ifstrequal{\pgfplotsretval}{\topworkabbr}{1}{0}}
\itest
\ifnum\itest=1
\pgfplotstablegetelem{\k}{Tool}\of{\datatableB}
\pgfplotsretval
\fi
}
\end{document}
答案1
我不确定我是否理解了这个问题,但是这用一个有效的平等测试取代了无效的平等测试。
\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplotstable}
% \usepackage{ifthen}
% \usepackage{etoolbox}
\begin{filecontents*}{tools.dat}
Name Abbreviation
Tool1 SL
Tool2 SK
Tool3 UP
\end{filecontents*}
\begin{filecontents*}{tabletools.dat}
Attribute Tool
SV CA
SV MC
BK PT
BK PR
MI SP
MI MC
Inter SL
Inter SK
Intra MC
Intra MS
VL AA
VL MC
LM LC
LM ME
N SS
N MC
R MC
R GB
I LC
I CA
A UP
A SL
S SK
S AP
E SM
E MC
C MC
C CA
\end{filecontents*}
\begin{filecontents*}{topstyles.dat}
Name Abbreviation percentage
Inter Inter 0
Music MI 0
S-Visual SV 0
V-Linguistic VL 5
B-Kinesthetic BK 0
Intraper Intra 0
Logic-Math LM 20
Natural N 10
\end{filecontents*}
\begin{document}
\pgfplotstableread[columns={Name,Abbreviation,percentage}]{topstyles.dat}\datatableA
\pgfplotstablesort[sort key={percentage}, sort cmp=int >]{\datatablesorted}{\datatableA}
\pgfplotstablegetrowsof{\datatablesorted}
\pgfplotstablegetelem{0}{Abbreviation}\of{\datatablesorted}
\edef\topworkabbr{\pgfplotsretval}
\pgfplotstableread[columns={Attribute,Tool}]{tabletools.dat}\datatableB
\pgfplotstablegetrowsof{\datatableB}
\pgfmathtruncatemacro{\RowsInTable}{\pgfplotsretval-1}
\foreach \k in {0,...,\RowsInTable}{
\pgfplotstablegetelem{\k}{Attribute}\of{\datatableB}
\edef\eltest{\pgfplotsretval}
\ifx\eltest\topworkabbr\relax%
\typeout{\eltest=\topworkabbr}
\pgfplotstablegetelem{\k}{Tool}\of{\datatableB}
\pgfplotsretval
\fi
}
\end{document}