So lesen Sie aus einer externen Datei und vergleichen mit einer gegebenen Zeichenfolge

So lesen Sie aus einer externen Datei und vergleichen mit einer gegebenen Zeichenfolge

Ich versuche, Text aus einer externen Datei (someexternalfile.txt) zu extrahieren und ihn mit einer gegebenen Zeichenfolge ( sometext) zu vergleichen, aber es wird angezeigt, dass der externe Text und die gegebene Zeichenfolge nicht identisch sind (obwohl sie es sein sollten).

Latex:

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

eineexterneDatei.txt:

sometext

Wie kann ich das lösen?

Antwort1

  • \ifxvergleicht die Bedeutungen zweier Token, \ifx{\myreadlinevergleicht also die Bedeutung des Tokens mit der Bedeutung des Tokens . Die Bedeutungen dieser Token sind unterschiedlich, daher springt TeX weiter, bis es auf das Token direkt hinter der Übereinstimmung stößt, die — - - - Übereinstimmung ist unabhängig von Gruppenübereinstimmung.{1\myreadline\else}2\if..\else\fi
  • Der Leseapparat von TeX befindet sich nach dem Lesen und Tokenisieren der Phrase im Zustand M (Zeilenmitte), sometextwobei der Kategoriencode des Wagenrücklaufzeichens 5 (Zeilenende) ist. Das durch den \endlinechar-Mechanismus angehängte Wagenrücklaufzeichen ergibt also ein Leerzeichen, das ebenfalls in den Ersetzungstext des Makros gelangt . Sie können den -Mechanismus über \myreadlineabschalten .\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}

Antwort2

Sie müssen am Ende auch ein Leerzeichen hinzufügen. Es ist eine gute Idee, den Catcode mit zu überprüfen \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}

verwandte Informationen