使用 `latex3` 计算文件中的行数

使用 `latex3` 计算文件中的行数

如何使用来计算文件的行数latex3

\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
% variables


% user level commands
\NewDocumentCommand{\nlines}{ m }
 {

    % some  code

 }


\ExplSyntaxOff

\begin{document}

\nlines{\jobname.dat} % print integer value = number of lines in \jobname.dat

\end{document}

答案1

您可以使用(实验性的)文件读取循环

\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
% variables

\ior_new:N \g__sergiokapone_count_ior
\int_new:N \l__sergiokapone_count_int

% user level commands
\NewDocumentCommand{\nlines}{ m }
 {
    \ior_open:Nn \g__sergiokapone_count_ior {#1}
    \int_zero:N \l__sergiokapone_count_int
    \ior_map_inline:Nn \g__sergiokapone_count_ior
      { \int_incr:N \l__sergiokapone_count_int }
    \int_use:N \l__sergiokapone_count_int
 }

\ExplSyntaxOff

\begin{document}

\nlines{\jobname.dat}

\end{document}

请注意,文件在这里有四行:文件末尾有一个空白行。人们可能会注意到这样的行...

答案2

使用 LuaTeX 可以轻松实现这一点,因为 Lua 带有文件迭代器。额外好处:它完全可扩展。

\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}

\documentclass{article}

\newcommand\nlines[1]{%
  \directlua{
    local ctr = 0
    for _ in io.lines([[#1]]) do
        ctr = ctr + 1
    end
    tex.sprint(ctr)
  }%
}

\begin{document}

\edef\x{\nlines{\jobname.dat}} \x

\end{document}

相关内容