表格:过滤器不适用于小数值

表格:过滤器不适用于小数值

我有一个适用于第一个文件内容的过滤器,但是不是第二个。事实上,只要表中的值有小数,过滤器就无法工作。

有人知道这是为什么吗?我该如何解决这个问题?最终目标是创建一个过滤器,从 excel 表中获取低于 0.05 的 p 值,因此小数非常重要。

非常感谢!PS:有人评论说这是因为 \ifnum 不适用于浮点数,但是我该怎么做才能在没有 ifthen 的情况下仍然能够过滤带有小数的值?

\documentclass{article}
\usepackage{csvsimple,filecontents,longtable}
\usepackage{etoolbox}
\usepackage{booktabs}

\begin{filecontents*}{random.csv}
A,B,C

egfwgt,39,ery

wrgsreh,3645467,yfghs

rshgtesh,346,rsth

ethshs,365,sty

\end{filecontents*}

\begin{filecontents*}{random2.csv}
A,B,C

egfwgt,39.5,ery

wrgsreh,3645467,yfghs

rshgtesh,346,rsth

ethshs,365,sty

\end{filecontents*}


\begin{document}


            \csvreader 
                [tabular=ccc,
                table head= \toprule A & B & C \\ \midrule,
                late after line= \\,
                table foot= \bottomrule, %very important to put line at bottom
               filter=\B<347,
                ]%
                {random.csv}{A=\A, B=\B, C=\C}%
                {\A  & \B & \C}

\csvreader 
                [tabular=ccc,
                table head= \toprule A & B & C \\ \midrule,
                late after line= \\,
                table foot= \bottomrule, %very important to put line at bottom
               filter=\B<347,
                ]%
                {random2.csv}{A=\A, B=\B, C=\C}%
                {\A  & \B & \C}


\end{document}

答案1

您可以使用手册第 18 页中描述的技巧csvsimple,即将列转换为过滤器的维度并\ifdimless使用full filter

例如full filter=\ifdimless{\B sp}{347 sp}{\csvfilteraccept}{\csvfilterreject}

笔记3645467由于该值非常大,超出了正常点的范围, 因此我不得不使用缩放点。

据我所知,比例点(在普通 LaTeX 中)被视为整数。因此,如果您的过滤器必须为十进制数(例如 < 40.5),我认为sps 将不起作用,您必须求助于pts 或类似的数字,其必须为(使用 etex)<=16384。因此,如果您的过滤器是十进制的,并且您的值超出此数量,我认为您不能使用csvsimple

结束语

查看代码

\documentclass{article}
\usepackage{csvsimple,filecontents,longtable}
\usepackage{etoolbox}
\usepackage{booktabs}

\begin{filecontents*}{random.csv}
A,B,C

egfwgt,39,ery

wrgsreh,3645467,yfghs

rshgtesh,346,rsth

ethshs,365,sty

\end{filecontents*}

\begin{filecontents*}{random2.csv}
A,B,C

egfwgt,39.5,ery

wrgsreh,3645467,yfghs

rshgtesh,346,rsth

ethshs,365,sty

\end{filecontents*}


\begin{document}


            \csvreader 
                [tabular=ccc,
                table head= \toprule A & B & C \\ \midrule,
                late after line= \\,
                table foot= \bottomrule, %very important to put line at bottom
               filter=\B<347,
                ]%
                {random.csv}{A=\A, B=\B, C=\C}%
                {\A  & \B & \C}

\csvreader 
                [tabular=ccc,
                table head= \toprule A & B & C \\ \midrule,
                late after line= \\,
                table foot= \bottomrule, %very important to put line at bottom
               full filter=\ifdimless{\B sp}{347sp}{\csvfilteraccept}{\csvfilterreject}%
                ]%
                {random2.csv}{A=\A, B=\B, C=\C}%
                {\A  & \B & \C}


\end{document}

有结果

在此处输入图片描述

相关内容