외부 파일에서 읽고 주어진 문자열과 비교하는 방법

외부 파일에서 읽고 주어진 문자열과 비교하는 방법

외부 파일(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(줄 끝)입니다. 따라서 -mechanism으로 인해 추가된 캐리지 리턴 문자는 \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}

관련 정보