Cómo leer desde un archivo externo y compararlo con una cadena dada

Cómo leer desde un archivo externo y compararlo con una cadena dada

Estoy intentando extraer texto de un archivo externo (someexternalfile.txt) y compararlo con una cadena determinada ( sometext) pero dice que el texto externo y la cadena dada no son iguales (aunque deberían serlo).

Látex:

\documentclass[12pt,a4paper]{article}

\newread\myread
\openin\myread=someexternalfile.txt

\begin{document}

\read\myread to \myreadline
\ifx{\myreadline}{sometext}{Same.}\else{Not same.}\fi

\end{document}

algún archivo externo.txt:

sometext

¿Como puedo resolver esto?

Respuesta1

  • \ifxcompara los significados de dos tokens, por lo tanto \ifx{\myreadlinecompara el significado del token con el significado del token . Los significados de estos tokens difieren, por lo que TeX avanza hasta encontrar el token justo detrás de la coincidencia, que es — - - -la coincidencia es independiente de la coincidencia de grupo.{1\myreadline\else}2\if..\else\fi
  • El aparato de lectura de TeX está en el estado M (mitad de línea) después de leer y tokenizar la frase, sometextmientras que el código de categoría del carácter de retorno de carro es 5 (final de línea). Por lo tanto, el carácter de retorno de carro agregado debido al \endlinecharmecanismo produce un token de espacio que también lo convierte en el texto de reemplazo de la macro \myreadline. Puede desactivar el \endlinecharmecanismo mediante \endlinechar=-1\relax.
\begin{filecontents*}{someexternalfile.txt}
sometext
\end{filecontents*}

\documentclass[12pt,a4paper]{article}

\newread\myread
\openin\myread=someexternalfile.txt

\begin{document}

\begingroup
\endlinechar=-1\relax
\global\read\myread to \myreadline
\endgroup

\def\sometext{sometext}
\def\someothertext{someothertext}

\ifx\myreadline\sometext Same.\else Not same.\fi

\ifx\myreadline\someothertext Same.\else Not same.\fi

\end{document}

Respuesta2

También necesitas agregar un espacio al final. Es una buena idea comprobar el código cat usando \meaning.

\begin{filecontents*}{someexternalfile.txt}
sometext
\end{filecontents*}
\documentclass[12pt,a4paper]{article}

\newread\myread
\openin\myread=someexternalfile.txt

\begin{document}

\read\myread to\myreadline
(\myreadline)

\def\test{sometext }%
\ifx\myreadline\test\relax Same.\else Not same.\fi

\end{document}

información relacionada