DECODE와 동등한 라텍스(텍스트 확인 및 번호 할당)

DECODE와 동등한 라텍스(텍스트 확인 및 번호 할당)

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)
}
@

관련 정보