外部ファイルから読み取り、指定された文字列と比較する方法

外部ファイルから読み取り、指定された文字列と比較する方法

外部ファイル (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

  • \ifx2 つのトークンの意味を比較します。つまり、\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}

関連情報