Как прочитать из внешнего файла и сравнить с заданной строкой

Как прочитать из внешнего файла и сравнить с заданной строкой

Я пытаюсь извлечь текст из внешнего файла (someexternalfile.txt) и сравнить его с заданной строкой ( sometext), но он говорит, что внешний текст и заданная строка не совпадают (хотя должны быть).

Латекс:

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

someexternalfile.txt:

sometext

Как мне решить эту проблему?

решение1

  • \ifxсравнивает значения двух токенов, таким образом \ifx{\myreadlineсравнивает значение токена со значением токена . Значения этих токенов различаются, поэтому TeX пропускает вперед, пока не встретит токен сразу за сопоставлением, что является — - - -сопоставление не зависит от группового сопоставления.{1\myreadline\else}2\if..\else\fi
  • Читающий аппарат TeX находится в состоянии M (середина строки) после чтения и токенизации фразы, sometextв то время как код категории символа возврата каретки равен 5 (конец строки). Таким образом, символ возврата каретки, добавленный благодаря -механизму, \endlinecharдает токен пробела, который также попадает в заменяющий текст макроса \myreadline. Вы можете отключить \endlinechar-механизм с помощью \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}

решение2

Вам также нужно добавить пробел в конце. Хорошая идея проверить catcode с помощью \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}

Связанный контент