Pgfplotstable:从文件读取时过滤特定行

Pgfplotstable:从文件读取时过滤特定行

到目前为止,我有一个文件,我从中读取数据到宏中\data(在 MWE 中,我用代码表替换了该文件)。从这个表中,只选择并打印了 3 行。

我想要实现的是将过滤后的表格(只有 3 行)放回到宏中\datafiltered。或者反过来,从头开始读取这 3 行。所以我在读取时寻找过滤选项。有类似的东西吗?

关于意图的一些信息:此宏应与来自其他两个文件输入的两个相同宏一起使用,并将它们垂直连接到一个长表。然后需要将此长表与已经存在的表水平连接(添加列)。但是,我认为只要我在宏中拥有过滤后的表,这将没有问题。

梅威瑟:

\documentclass{minimal}
\usepackage{pgfplotstable}
\begin{document}
\makeatletter
\pgfplotstableset{
    discard if not/.style n args={4}{
        row predicate/.code={
            \def\pgfplotstable@loc@TMPd{\pgfplotstablegetelem{##1}{#1}\of}
            \expandafter\pgfplotstable@loc@TMPd\pgfplotstablename
            \edef\tempa{\pgfplotsretval}
            \edef\tempb{#2}
                        \edef\tempc{#3}
                        \edef\tempd{#4}
            \ifx\tempa\tempb
            \else
                            \ifx\tempa\tempc
                            \else
                                \ifx\tempa\tempd
                                \else
                                    \pgfplotstableuserowfalse
                                \fi
                            \fi
            \fi
        }
    }
}
\makeatother
\pgfplotstableread{
  num       value
  1         2
  2         5
  3         3
  4         2
  5         4
  6         1
}\data

\pgfplotstabletypeset[col sep=semicolon,discard if not={num}{1}{2}{3}]{\data}
\end{document}

相关内容