我想逐行读取文本文件。每行代表一个数据集的名称。我想绘制每个数据集的图表。名称用于引用包含数据的文件,并且必须出现在标题中。此外,名称可能包含特殊字符,例如下划线。
文本文件(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 的评论,我希望这会起作用。
已完成的事情:
文件名用
"
引号引起来,以允许数据文件名中包含下划线之类的字符。读入后
\fileline
需要进行对比,筛选出文件名最后的空行,不作为文件名处理,因此\if\relax\fileline\relax\else\begin{figure}...\end{figure}\fi
在逻辑上添加了。为了消除在末尾引入的空格,引入了
\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}