DECODE に相当する Latex (テキストをチェックして番号を割り当てる)

DECODE に相当する Latex (テキストをチェックして番号を割り当てる)

CSV ファイルには 4 つの可能性のある文があります。例: ここに文 1、もう 1 つの文、もう 1 つの文が追加され、最後の文。

Latex では、「ここに文 1」が存在する場合は 1 を出力します。SQL の DECODE のようなものです。同様の機能を学習できる URL を教えていただけますか。

よろしく、

答え1

SQLタイプの機能をお探しの場合は、そのdatatool包みMWE は CSV ファイルを読み取りMyData.csv、「もう 1 つの文」と「もう 3 つの文」を検索します。

ここに画像の説明を入力してください

ノート:

  • その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 ファイル (基本的には R 言語機能を備えた LaTeX ファイル) を使用するだけで簡単に実現できます。knitr パッケージを R studio に追加することを忘れないでください。

通常のLaTeXファイルとしてファイルを開始し、\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)
}
@

関連情報