I am trying to load a whole lot of CSV's using \pgfplotstableread and dynamically assign them a macro name from a \pgfplotsinvokeforeach loop. I tried \csname but suspect this is totally the wrong approach!

\newcommand{\PlotsAuto}[1]{
\pgfplotsinvokeforeach{NoGender,Female,Male}{
}
}


I cannot do it with \foreach as the loaded tables would be local to that environment. (I tried with \foreach \gender/\name in {NoGender/\NoGender.... with no success)

And then how can I access these in future loops which create the graphs?

• remove the backslash from ##1 and use only one e.g. #1 – percusse Feb 3 '15 at 11:05
• @percusse, with: \pgfplotstableread{../Data/Mydata-##1.csv}{\csname #1\endcsname} I get an error: 'too many }'s and Extra \endcsname \PlotsAuto – SpmP Feb 3 '15 at 21:08
• Also edited question to fully reflect the command, using #1 in the filename worked when manually doing \pgfplotstableread for every line, how can this work when using #1 from pgfplotsinvokeforeach? – SpmP Feb 3 '15 at 21:15
• ...also if (as it sometimes does) the filename contains a number straight after where the ##1 would be expanded. i.e. MySubData-NoGender2yr.csv, how can I handle this as it looks like My{}Data-##12yr.csv – SpmP Feb 3 '15 at 21:25
• Put a space afterwards – percusse Feb 3 '15 at 21:39

It appears to be an expansion issue as usual. But please don't do this number involving macro stuff. It is really unnecessary complication. Consider a batch file name treatment instead.

\documentclass{article}
\usepackage{pgfplotstable,filecontents}
\begin{filecontents*}{Myreddata-Female4yr.csv}
a b
1 2
3 4
\end{filecontents*}
\begin{filecontents*}{Myreddata-Male23.csv}
a b
5 6
7 8
\end{filecontents*}

\newcommand{\PlotsAuto}[1]{%
\pgfplotsinvokeforeach{Female4yr,Male23}{%
\begingroup\edef\temp{%
`