\write und pgfplotstable: Das Hinzufügen von \pgfplotstableread zu \loop geht schief

\write und pgfplotstable: Das Hinzufügen von \pgfplotstableread zu \loop geht schief

Ich habe einen Code von @DavidCarlisle, der Ausgabe-txt-Dateien generiert, und ich möchte alle Ausgabedateien in einer pgfplots-Tabelle zusammenfassen.
Also versuche ich hinzuzufügen
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main} \else {.........} \fi

Dies ergibt jedoch nur einige seltsame Omegas und \pgfplotstabletypeset[col sep=comma]{\main}funktioniert nicht.

Was muss ich tun?

Bildbeschreibung hier eingeben

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout
\begin{document}

{
\endlinechar=\newlinechar%
\filecount=1 %
\def\aaa{file number \the\filecount}%
\loop%
\immediate\openout\cisout=data\the\filecount.txt %
\immediate\write\cisout{%
111, 222,   \aaa 
}%
\immediate\closeout\cisout %
\advance\filecount by 1 %
\ifnum\filecount<5 %
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main} \else\fi
\repeat %
}%

\section{pgfplotstable Test - bad}
%\pgfplotstabletypeset[col sep=comma]{\main}
\dots and some bad Omegas above\dots

\section{input Test - good}
\input{data1.txt}
\input{data3.txt}
\end{document}

Antwort1

Sie tun dies \ifnum\filecount=1, wenn der Zähler bereits erhöht wurde, sodass der Code dafür \pgfplotstablereadnie ausgeführt wird.

Außerdem, selbst wenn Sie es ausführen können, \loopist das Ganze in einer Gruppe und \mainwird daher am Ende der Gruppe vergessen.

Die Omegas wurden hergestellt, weil \finicht gefolgt wurde %.

Hier ist ein funktionierender Code, obwohl Ihr Ziel nicht klar ist.

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout

\begin{document}

\filecount=1
\def\aaa{file number \the\filecount}%
\loop
\immediate\openout\cisout=data\the\filecount.txt
\immediate\write\cisout{%
111, 222,   \aaa
}
\immediate\closeout\cisout
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main}\fi
\advance\filecount by 1
\ifnum\filecount<5
\repeat

\section{pgfplotstable Test - bad}

\pgfplotstabletypeset[col sep=comma]{\main}

\section{input Test - good}
\input{data1.txt}
\input{data3.txt}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Ist es letztendlich das, was Sie erreichen möchten?

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout
\begin{document}

{
\filecount=0
\immediate\openout\cisout=data1.txt
\immediate\write\cisout{a, b, c}% write header
\loop\ifnum\filecount<5
  \advance\filecount by 1
  \immediate\write\cisout{111, 222, \the\filecount }%
\repeat% no \fi needed
\immediate\closeout\cisout

\pgfplotstableread[col sep=comma]{data1.txt}{\main}%

\pgfplotstabletypeset\main
\end{document}

Demo


Diese Version verwendet \foreach.

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newwrite\cisout

\begin{document}
\immediate\openout\cisout=data1.txt
\immediate\write\cisout{a, b, c}% write header
\foreach \i in {1,..., 5}%
  {\immediate\write\cisout{111, 222, \i }}%
\immediate\closeout\cisout

\pgfplotstableread[col sep=comma]{data1.txt}{\main}%

\pgfplotstabletypeset\main
\end{document}

verwandte Informationen