从文件内容读取的两个表中创建唯一列表

从文件内容读取的两个表中创建唯一列表

我有两个表..一个包含具有值的属性,例如

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}

相关内容