如何從外部文件讀取並與給定字串進行比較

如何從外部文件讀取並與給定字串進行比較

我試圖從外部文件(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比較兩個標記的含義,從而\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}

相關內容