%20.png)
CSV 파일에는 4개의 가능한 문장이 있습니다. 예: 여기에 1번째 문장, 한 문장 더, 한 문장 더 추가, 마지막 문장.
라텍스에서; "여기에 문장 1"이 있으면 1을 인쇄하고 싶습니다. SQL의 DECODE와 같은 것입니다. 비슷한 기능을 배울 수 있는 URL을 알려주실 수 있나요?
감사합니다,
답변1
특별히 SQL 유형 기능을 찾고 있으므로 다음을 살펴보는 것이 좋습니다.패키지datatool
. MWE는 CSV 파일을 읽은 MyData.csv
다음 "한 문장 더" 및 "3 문장 더"를 검색합니다.
노트:
- 패키지
filecontents
이 테스트 사례를 위해 읽을 파일을 설정하는 데 사용되었습니다. 실제 사용 사례에서는 필요하지 않습니다. newtoggle
나는 부터 사용했다패키지etoolbox
나는 구문보다 구문을 선호합니다\newif
. 그러나 추가 패키지를 포함하지 않으려면 이를 사용\newif
하거나 사용하도록 조정하는 것이 매우 간단해야 합니다.다른 조건부 방법.- 원하는 기능이 전부인 경우 "Found it" 텍스트를 질문에 따라 "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 파일입니다. R 스튜디오에 knitr 패키지를 추가하는 것을 잊지 마세요.
따라서 파일을 일반 라텍스로 시작한 다음 \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)
}
@