Latex-Äquivalent von DECODE (Text prüfen und Nummer zuweisen)

Latex-Äquivalent von DECODE (Text prüfen und Nummer zuweisen)

Ich habe vier mögliche Sätze in der CSV-Datei. Beispiel: Satz 1 hier, noch ein Satz, noch ein Satz hinzugefügt, letzter Satz.

In Latex möchte ich 1 drucken, wenn „Satz 1 hier“ vorhanden ist. So etwas wie DECODE in SQL. Können Sie mir bitte eine URL zeigen, wo ich ähnliche Funktionen erlernen kann.

Grüße,

Antwort1

Da Sie speziell nach SQL-Funktionalität suchen, schlage ich vor, dass Sie sichDas datatoolPaket. Der MWE liest die CSV-Datei MyData.csvund sucht dann nach „noch einem Satz“ und „noch drei Sätze“:

Bildbeschreibung hier eingeben

Anmerkungen:

  • Das filecontentsPaket wurde verwendet, um eine zu lesende Datei für diesen Testfall einzurichten. Es wird in Ihrem tatsächlichen Anwendungsfall nicht benötigt.
  • Ich habe verwendet newtogglevonDas etoolboxPaketda ich diese Syntax gegenüber der \newifSyntax bevorzuge. Wenn Sie jedoch kein zusätzliches Paket einbinden möchten, sollte es ziemlich einfach sein, dies so anzupassen, dass es verwendet wird \newifodereinige andere bedingte Methoden.
  • Ändern Sie den Text „Gefunden“ in „1“ (wie in der Frage), wenn das die einzige gewünschte Funktionalität ist, oder passen Sie den Code dort an, um etwas anderes zu tun.

Code:

\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} 

Antwort2

Wenn ich das richtig verstehe, möchten Sie eine Zeile in einer CSV-Datei überprüfen und basierend auf diesem Satz eine Nummer zuweisen.

Sie können dies einfach mithilfe von R- und Sweave-Dateien erreichen (im Grunde handelt es sich dabei um LaTeX-Dateien mit R-Sprachfunktionalität). Denken Sie daran, das knitr-Paket zu R Studio hinzuzufügen.

\begin{document} Sie beginnen die Datei also als normales Latex und schreiben dann den folgenden Block

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

verwandte Informationen