Ler número do arquivo

Ler número do arquivo

Eu tenho um arquivo chamado _runs.ini. Dependendo do seu conteúdo, o documento é compilado de forma diferente. Tentei ler o conteúdo e executei um\ifthenelse comando sem sucesso.

Aqui está meu 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}

O conteúdo de _runs.iniis, 0mas obviamente o \equal-command não o reconhece como 0.

O que estou fazendo de errado?

Responder1

E uma resposta com o 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}

Responder2

Se você tiver certeza de que o arquivo contém um número, recomendo uma estratégia mais simples.

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

Ou com catchfile:

\documentclass{book}
\usepackage{catchfile}

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

Você também pode usar ifthen, se quiser:

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

Responder3

Esta resposta, usando readarraypackage, é configurada para discernir se o único caractere do arquivo é "0" ou não. Se você precisar de um teste mais complexo (ou seja, se o arquivo puder ter mais de um caractere), informe-me os detalhes.

O \readdefcomando coloca o conteúdo do arquivo em a \def, que posso comparar diretamente com an \if(aqui presumo que o arquivo seja um único caractere).

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

Responder4

Esquecido \ppruns:

\usepackage{etoolbox}

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

Ou melhor (TeX simples!):

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

informação relacionada