DECODE 的 Latex 等效项(检查文本并分配编号)

DECODE 的 Latex 等效项(检查文本并分配编号)

我在 CSV 文件中有四个可能的句子。例如:此处为第 1 句,再加一句,再添加一句,最后一句。

在 Latex 中;如果存在“此处的句子 1”,我想打印 1。类似于 SQL 中的 DECODE。您能否告诉我可以学习类似功能的 URL。

问候,

答案1

由于您专门寻找 SQL 类型的功能,我建议您探索包裹datatoolMWE 读取 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)
}
@

相关内容