Como ler de um arquivo externo e comparar com uma determinada string

Como ler de um arquivo externo e comparar com uma determinada string

Estou tentando extrair texto de um arquivo externo (someexternalfile.txt) e compará-lo com uma determinada string ( sometext), mas está dizendo que o texto externo e a string fornecida não são iguais (embora devessem ser).

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}

algum arquivo externo.txt:

sometext

Como posso resolver isso?

Responder1

  • \ifxcompara os significados de dois tokens, \ifx{\myreadlinecomparando assim o significado do token com o significado do token . Os significados desses tokens diferem, portanto, o TeX avança até encontrar o token logo atrás da correspondência, que é - - - -a correspondência é independente da correspondência de grupo.{1\myreadline\else}2\if..\else\fi
  • O aparelho de leitura do TeX está no estado M (meio da linha) após ler e tokenizar a frase, sometextenquanto o código da categoria do caractere de retorno de carro é 5 (fim da linha). Assim, o caractere de retorno de carro anexado devido ao \endlinechar-mecanismo produz um token de espaço que também faz parte do texto de substituição da macro \myreadline. Você pode desligar o \endlinecharmecanismo via \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}

Responder2

Você também precisa adicionar um espaço no final. É uma boa ideia verificar o catcode 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}

informação relacionada