Латексный эквивалент DECODE (проверьте текст и присвойте номер)

Латексный эквивалент DECODE (проверьте текст и присвойте номер)

У меня есть четыре вероятных предложения в CSV-файле. Например: предложение 1 здесь, еще одно предложение, добавлено еще одно предложение, последнее предложение.

В Latex; я хочу напечатать 1, если присутствует "предложение 1 здесь". Что-то вроде DECODE в SQL. Можете ли вы указать мне URL, где я могу изучить похожую функциональность.

С уважением,

решение1

Поскольку вы ищете именно функциональность типа SQL, я предлагаю вам изучитьпакетdatatool. MWE считывает CSV-файл MyData.csv, а затем ищет «еще одно предложение» и «еще три предложения»:

введите описание изображения здесь

Примечания:

  • Пакет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 (по сути, это файлы LaTeX, которые имеют функциональность языка R). Не забудьте добавить пакет knitr в R studio.

Итак, вы начинаете файл как обычный латекс, затем после того, как \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)
}
@

Связанный контент