Leer número del archivo

Leer número del archivo

Tengo un archivo llamado _runs.ini. Dependiendo de su contenido, el documento se redacta de forma diferente. Intenté leer el contenido y ejecuté un \ifthenelsecomando sin éxito.

Aquí está mi 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}

El contenido de _runs.inies 0pero obviamente el \equalcomando no lo reconoce como 0.

¿Qué estoy haciendo mal?

Respuesta1

Y una respuesta con el 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}

Respuesta2

Si está seguro de que el archivo contiene un número, le recomiendo una estrategia más sencilla.

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

O con catchfile:

\documentclass{book}
\usepackage{catchfile}

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

También puedes usar ifthen, si lo deseas:

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

Respuesta3

Esta respuesta, utilizando readarrayel paquete, está configurada para discernir si el único carácter del archivo es un "0" o no. Si necesita una prueba más compleja (es decir, si el archivo puede tener más de un carácter), déjeme saber los detalles.

El \readdefcomando coloca el contenido del archivo en a \def, que luego puedo comparar directamente con an \if(aquí asumo que el archivo es de un solo carácter).

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

Respuesta4

Olvidó \ppruns:

\usepackage{etoolbox}

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

O mejor (¡texto simple!):

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

información relacionada