我在 CSV 文件中有四个可能的句子。例如:此处为第 1 句,再加一句,再添加一句,最后一句。
在 Latex 中;如果存在“此处的句子 1”,我想打印 1。类似于 SQL 中的 DECODE。您能否告诉我可以学习类似功能的 URL。
问候,
答案1
由于您专门寻找 SQL 类型的功能,我建议您探索包裹datatool
MWE 读取 CSV 文件MyData.csv
,然后搜索“one more sentence”和“three more sentence”:
笔记:
- 包裹
filecontents
用于设置要为此测试用例读取的文件。实际用例中不需要它。 - 我已经使用
newtoggle
过包裹etoolbox
因为我更喜欢那个语法而不是\newif
语法。但如果你不想包含额外的包,那么调整它以使用\newif
或其他一些条件方法。 - 如果这就是您想要的全部功能,请将“找到”文本更改为“1”(根据问题),或者调整那里的代码以执行其他操作。
代码:
\documentclass{article}
\usepackage{datatool}
\usepackage{xstring}
\usepackage{etoolbox}
%\usepackage{filecontents}% <-- Commented out to prevent overwriting MyData.csv
\begin{filecontents*}{MyData.csv}
sentence 1 here,
one more sentence,
one more sentence added,
last sentence,
\end{filecontents*}
\newtoggle{FoundInDB}
\newcommand*{\CheckIfInDB}[4]{%
% #1 = database
% #2 = string to chek
% #3 = code to execute if string is found
% #4 = code to execute if string is NOT found
\global\togglefalse{FoundInDB}%
\DTLforeach{#1}{%
\CurrentSentence=Sentence%
}{%
\IfStrEq{\CurrentSentence}{#2}{%
%% Found string -- we are done
\global\toggletrue{FoundInDB}%
\dtlbreak% No point in searching rest of file
}{%
% Still haven't found what we are looking for :-(
}%
}%
\iftoggle{FoundInDB}{#3}{#4}%
}%
\begin{document}
\DTLloaddb[noheader,keys={Sentence}]{myDB}{MyData.csv}
\CheckIfInDB{myDB}{one more sentence}{Found it}{Not Found!}
\CheckIfInDB{myDB}{three more sentences}{Found it}{Not Found!}
\end{document}
答案2
如果我理解正确的话,您想检查 CSV 文件中的一行并根据这句话分配一个数字。
您可以简单地使用 R 和 sweave 文件实现这一点(它们基本上是具有 R 语言功能的 LaTeX 文件。请记住将 knitr 包添加到 R studio。
因此,你以普通 latex 格式开始编写文件,然后\begin{document}
编写以下块
<<echo=false>>=
Data<-read.csv("file.path.here")
sapply(Data, function(x){
if(x=="sentence 1 here"){
return(1)
} elseif(x=="sentence2"){
return(2)
}else{
return(0)
}
@