Nummer aus Datei lesen

Nummer aus Datei lesen

Ich habe eine Datei namens _runs.ini. Je nach Inhalt wird das Dokument unterschiedlich zusammengestellt. Ich habe versucht, den Inhalt zu lesen und habe einen \ifthenelse-Befehl ausgeführt, ohne Erfolg.

Hier ist mein MWE:

\documentclass{book}
\usepackage{ifthen}

\newcommand\getrun{%
    \newread\tmp
    \openin\tmp=_runs.ini
    \read\tmp to \pruns
    \def\ppruns{\numexpr \pruns\relax}
    \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\equal{\ppruns}{0}}
        {true}{false}
}

\begin{document}

\getrun
\startrun

\end{document}

Der Inhalt von _runs.iniist 0, aber der \equal-Befehl erkennt ihn offensichtlich nicht als 0.

Was mache ich falsch?

Antwort1

Und eine Antwort mit dem Original\ifthenelse

\documentclass{book}
\usepackage{ifthen}

\newcommand\getrun{%
    \newread\tmp
    \openin\tmp=_runs.ini
    \read\tmp to \pruns
    \def\ppruns{\numexpr \pruns\relax}
    \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\equal{\pruns}{0 }}%<-- space!
        {true}{false}
}

\newcommand\startrunb{%
  \ifthenelse{\ppruns=0}
        {true}{false}
}

\begin{document}

\getrun
\startrun

\startrunb
\end{document}

Antwort2

Wenn Sie sicher sind, dass die Datei eine Nummer enthält, empfehle ich eine einfachere Strategie.

\documentclass{book}

\newread\tmp
\newcommand\getrun{%
  \openin\tmp=_runs.ini
  \read\tmp to \pruns
  \closein\tmp
}

\newcommand\startrun{%
  \ifnum\pruns=0
    true
  \else
    false
  \fi
}

\begin{document}

\getrun
\startrun

\end{document}

Oder mit catchfile:

\documentclass{book}
\usepackage{catchfile}

\newcommand{\run}{%
  \CatchFileDef{\pruns}{_runs.ini}{}%
  \ifnum\pruns=0
     true
  \else
     false
  \fi
}

Sie können ifthenbei Bedarf auch Folgendes verwenden:

\documentclass{book}
\usepackage{ifthen}

\newread\tmp
\newcommand\getrun{%
  \openin\tmp=_runs.ini
  \read\tmp to \pruns
  \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\pruns=0}{true}{false}
}

\begin{document}

\getrun
\startrun

\end{document}

Antwort3

Diese Antwort, die readarrayein Paket verwendet, ist so eingerichtet, dass sie erkennt, ob das einzelne Zeichen der Datei eine „0“ ist oder nicht. Wenn Sie einen komplizierteren Test benötigen (d. h. wenn die Datei mehr als ein einzelnes Zeichen enthalten kann), teilen Sie mir die Einzelheiten mit.

Der \readdefBefehl platziert den Dateiinhalt in eine \def, die ich dann direkt mit einer vergleichen kann \if(hier gehe ich davon aus, dass die Datei ein einzelnes Zeichen ist).

\documentclass{article}
\usepackage{readarray}
\newcommand\getrun{\readdef{_runs.ini}{\mydata}}
\newcommand\startrun{\if0\mydata true\else false\fi}
\begin{document}
\getrun
\startrun
\end{document}

Antwort4

Vergessen \ppruns:

\usepackage{etoolbox}

\newcommand\startrun{%
  \ifnumcomp{\pruns}{=}{0}{true}{false}
}

Oder besser (einfaches TeX!):

\newcommand\startrun{%
  \ifnum\pruns=0
    true
  \else
    false
  \fi
}

verwandte Informationen