使用 expl3 计算文件中的符号数量

使用 expl3 计算文件中的符号数量

我尝试使用后端作为编程语言来计算文本文件中的符号总数expl3。我的想法是首先计算文件行中的符号数:

\ior_get_str:NN \g_file_ior \l_line_tl
\tl_map_inline:Nn \l_line_tl { \int_incr:N \l__sergiokapone_count_int}

然后将其添加到收集器\l_total_int

\int_add:Nn \l_total_int {\l_count_int}

我认为可以从文件行跳到另一行\ior_if_eof:NTF \g_file_ior

\begin{filecontents*}{\jobname.dat}
bbb
wwww
rrrrr
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\ior_new:N \g_file_ior
\tl_new:N  \l_line_tl
\int_new:N \l_line_count_int
\int_new:N \l_total_int

\NewDocumentCommand{\CharCount}{ m }
{
    \ior_open:Nn \g_file_ior {#1}
    \int_zero:N \l_line_count_int
    \int_zero:N \l_total_int

    \ior_if_eof:NTF \g_file_ior {} % jumping from line to line untill not eof
    {
        \ior_get_str:NN \g_file_ior \l_line_tl % Read line to \l_line_tl
        \tl_map_inline:Nn \l_line_tl { \int_incr:N \l_line_count_int} % count number of symbols in \l_line_tl
        \int_add:Nn \l_total_int {\l_line_count_int} % add current number of symbols to collector  \l_total_int 
    }
\int_use:N \l_total_int


}

\ExplSyntaxOff

\begin{document}

\CharCount{\jobname.dat}

\end{document}

我总是得到3正确的数字(12在 MWE 情况下)。请帮助我理解。

答案1

expl3代码有一个实验性的功能(嗯,它从 2012 年就存在了),ior_map_inline它读取一行又一行,并使用一些用户定义的宏来处理该行,这里称为\count_number_of_characters:n使用行内容作为参数。

在这个宏中,我已经用来\tl_count:N获取字符的数量。

\begin{filecontents*}{\jobname.dat}
bbb
wwww
rrrrr
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\ior_new:N \g_file_ior
\tl_new:N  \l_line_tl
\int_new:N \l_line_count_int
\int_new:N \l_total_int

\cs_new:Nn \count_number_of_characters:n {%
  \tl_set:Nn \l_tmpa_tl {#1}
  \int_add:Nn \l_total_int {\tl_count:N \l_tmpa_tl}
}

\NewDocumentCommand{\CharCount}{ m }
{
  \ior_open:Nn \g_file_ior {#1}
  \int_zero:N \l_line_count_int
  \int_zero:N \l_total_int

  \ior_map_inline:Nn \g_file_ior {
    \count_number_of_characters:n{##1}
  }
  \ior_close:N \g_file_ior
  \int_use:N \l_total_int

}

\ExplSyntaxOff

\begin{document}

\CharCount{\jobname.dat}

\end{document}

相关内容