%20.png)
У меня есть четыре вероятных предложения в 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)
}
@