%20.png)
Tenho quatro frases prováveis em arquivo CSV. Ex: frase 1 aqui, mais uma frase, mais uma frase acrescentada, última frase.
Em látex; Quero imprimir 1 se a "frase 1 aqui" estiver presente. Algo como DECODE em SQL. Você pode me indicar um URL onde posso aprender funcionalidades semelhantes.
Atenciosamente,
Responder1
Como você está procurando especificamente por funcionalidades do tipo SQL, sugiro que você exploreo datatool
pacote. O MWE lê o arquivo CSV MyData.csv
e depois procura por “mais uma frase” e “mais três frases”:
Notas:
- O
filecontents
pacote foi usado para configurar um arquivo para leitura para este caso de teste. Não é necessário no seu caso de uso real. - Eu usei
newtoggle
deoetoolbox
pacotepois prefiro essa sintaxe em vez da\newif
sintaxe. Mas se você não quiser incluir um pacote adicional, deve ser bastante simples adaptá-lo para uso\newif
oualguns outros métodos condicionais. - Altere o texto "Encontrado" para ser apenas "1" (conforme a pergunta) se essa for toda a funcionalidade que você deseja ou ajuste o código para fazer outra coisa.
Código:
\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}
Responder2
Se bem entendi, você deseja verificar uma linha em um arquivo CSV e atribuir um número com base nesta frase.
Você pode simplesmente conseguir isso usando arquivos R e sweave (eles são basicamente arquivos LaTeX que possuem funcionalidade da linguagem R. Lembre-se de adicionar o pacote knitr ao R Studio.
Então você começa o arquivo como látex normal e depois \begin{document}
escreve o seguinte pedaço
<<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)
}
@