逐行读取文本文件以绘制多个图表

逐行读取文本文件以绘制多个图表

我想逐行读取文本文件。每行代表一个数据集的名称。我想绘制每个数据集的图表。名称用于引用包含数据的文件,并且必须出现在标题中。此外,名称可能包含特殊字符,例如下划线。

文本文件(filetoread.txt)如下所示:

SomeDatasetName_1
NextDatasetName_2
...
LastDatasetName_n

我用方法逐行读取 filetoread.txt。在每次迭代中,我都想创建一个图。这是我的代码:

\documentclass[]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
    \newread\file
    \openin\file=filetoread.txt
        \loop\unless\ifeof\file
            \read\file to \fileline % Reads a line of the file into \fileline
            \begin{figure}
                \begin{tikzpicture}
                \begin{axis}[xlabel=XName,ylabel=YName]
                \addplot[no marks] table[x=TheX,y=TheY, col sep=comma] {Data/\fileline.txt};
                \end{axis}
                \end{tikzpicture}
            \end{figure}
        \repeat
    \closein\file
\end{document}

不幸的是,我收到以下错误:

  • 包 pgfplots 错误:无法读取表格文件“Data/SomeDatasetName_1 .tx\”(有关详细信息,请参阅 pgfplotstable 手册)。 \repeat
  • 包 pgfplots 错误:无法读取表格文件“Data/NextDatasetName_2 .tx\”(有关详细信息,请参阅 pgfplotstable 手册)。 \repeat
  • 包 pgfplots 错误:无法读取表格文件“Data/LastDatasetName_n .tx\”(有关详细信息,请参阅 pgfplotstable 手册)。 \repeat
  • 包 pgfplots 错误:无法读取表格文件“Data/\par .txt\”(有关详细信息,请参阅 pgfplotstable 手册)。 \repeat

有人能告诉我我做错了什么吗?我更喜欢使用这种方法,因为它不需要其他包来读取文本文件。谢谢。

答案1

我没有实际的文件可以使用,但根据 OP 的评论,我希望这会起作用。

已完成的事情:

  1. 文件名用"引号引起来,以允许数据文件名中包含下划线之类的字符。

  2. 读入后\fileline需要进行对比,筛选出文件名最后的空行,不作为文件名处理,因此\if\relax\fileline\relax\else\begin{figure}...\end{figure}\fi在逻辑上添加了。

  3. 为了消除在末尾引入的空格,引入了\fileline宏来删除它。\noblankfileline

妇女权利委员会:

\documentclass[]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\newcommand\noblankfileline{\expandafter\noblankaux\fileline\relax}
\def\noblankaux#1 \relax{#1}
\begin{document}
    \newread\file
    \openin\file=filetoread.txt
        \loop\unless\ifeof\file
            \read\file to \fileline % Reads a line of the file into \fileline
            \if\relax\fileline\relax\else
            \begin{figure}
                \begin{tikzpicture}
                \begin{axis}[xlabel=XName,ylabel=YName]
                \addplot[no marks] table[x=TheX,y=TheY, col sep=comma] {"Data/\noblankfileline.txt"};
                \end{axis}
                \end{tikzpicture}
            \end{figure}
            \fi
        \repeat
    \closein\file
\end{document}

相关内容