\write y pgfplotstable: Agregar \pgfplotstableread en \loop sale mal

\write y pgfplotstable: Agregar \pgfplotstableread en \loop sale mal

Recibo un código de @DavidCarlisle, que genera archivos txt de salida, y quiero juntar todos los archivos de salida en un pgfplotstable.
Así que intento agregar
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main} \else {.........} \fi

Pero esto sólo da algunos Omegas extraños y \pgfplotstabletypeset[col sep=comma]{\main}no funciona.

¿Qué tengo que hacer?

ingrese la descripción de la imagen aquí

\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}

Respuesta1

Lo estás haciendo \ifnum\filecount=1cuando el contador ya ha avanzado, por lo que el código \pgfplotstablereadnunca se ejecuta.

Además, incluso si logras ejecutarlo, el conjunto \loopestá en un grupo, por lo que \mainserá olvidado al final del grupo.

Los Omegas se produjeron porque \fino fueron seguidos por %.

Aquí hay un código funcional, aunque no está claro cuál es su objetivo.

\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}

ingrese la descripción de la imagen aquí

Respuesta2

En última instancia, ¿es esto lo que estás tratando de lograr?

\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}

manifestación


Esta versión utiliza \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}

información relacionada