我有一个适用于第一个文件内容的过滤器,但是不是第二个。事实上,只要表中的值有小数,过滤器就无法工作。
有人知道这是为什么吗?我该如何解决这个问题?最终目标是创建一个过滤器,从 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),我认为sp
s 将不起作用,您必须求助于pt
s 或类似的数字,其必须为(使用 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}
有结果