如何从外部文件读取并与给定的字符串进行比较

如何从外部文件读取并与给定的字符串进行比较

我试图从外部文件(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}

一些外部文件.txt:

sometext

我该如何解决这个问题?

答案1

  • \ifx比较两个 token 的含义,从而\ifx{\myreadline将 token 的含义与 token 的含义进行比较。这些 token 的含义不同,因此 TeX 会跳过前面的步骤,直到遇到匹配后的 token ,也就是 ——匹配与组匹配无关。{1\myreadline\else}2\if..\else\fi
  • TeX 的读取装置在读取并标记短语后处于状态 M(行中),sometext而回车符的类别代码为 5(行尾)。因此,由于 -mechanism 而附加的回车符\endlinechar会产生一个空格标记,该标记也会成为宏的替换文本。您可以通过\myreadline关闭-mechanism 。\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}

相关内容