pgfplotstable:用另一个表中的元数据替换表中的字符串(使用 foreachloop)

pgfplotstable:用另一个表中的元数据替换表中的字符串(使用 foreachloop)

Data.txt我有一张包含一些内容的主表

col1, col2, col3
a, b, c
x, y, z
aaa, abc, xyz

我想替换一些字符串。

如果我说

\pgfplotsinvokeforeach{x,y,z}{
\pgfplotstableset{string replace={#1}{was #1}  }  
} % works

它运作良好。

但如果我使用另一张桌子MetaData.txt

actual, target
a, 1
b, 2
c, 3

我想用主表中的“目标”替换“实际”

\pgfplotsinvokeforeach{0,...,2}{%
\pgfmathtruncatemacro\n{#1}
\pgfplotstablegetelem{\n}{actual}\of\MetaData%
\xdef\actual{\pgfplotsretval}%
\pgfplotstablegetelem{\n}{target}\of\MetaData%
\xdef\target{\pgfplotsretval}%
Let's replace: \actual, \target
% Problem here: 
\pgfplotstableset{  string replace={\actual}{\target}  }  % works not!
}% 

主表的字符串替换不起作用!

请注意,这些是任意示例,除了用“1”替换“a”之外,还可以用“whatever”替换“u”。

我需要做什么?

在此处输入图片描述

\begin{filecontents}[overwrite]{\jobname-Data.txt}
col1, col2, col3
a, b, c
x, y, z
aaa, abc, xyz
\end{filecontents}

\begin{filecontents}[overwrite]{\jobname-MetaData.txt}
actual, target
a, 1
b, 2
c, 3
\end{filecontents}

\documentclass[]{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\pgfplotstableset{string type, col sep=comma}
\begin{document}
\section{Original Table}
\pgfplotstabletypeset[]{\jobname-Data.txt}

\section{String Replaced Table}
\pgfplotsinvokeforeach{x,y,z}{
\pgfplotstableset{string replace={#1}{was #1}  }  
} % works

\pgfplotstableread[]{\jobname-MetaData.txt}\MetaData

% Problem: 
\pgfplotsinvokeforeach{0,...,2}{%
\pgfmathtruncatemacro\n{#1}

\pgfplotstablegetelem{\n}{actual}\of\MetaData%
\xdef\actual{\pgfplotsretval}%
\pgfplotstablegetelem{\n}{target}\of\MetaData%
\xdef\target{\pgfplotsretval}%
Let's replace: \actual, \target
% Problem here: 
\pgfplotstableset{  string replace={\actual}{\target}  }  % works not!
}% 

\bigskip
\pgfplotstabletypeset[]{\jobname-Data.txt}
\end{document}

答案1

一直都一样。:)

% Problem here solved: 
\edef\temp{\noexpand\pgfplotstableset{  string replace={\actual}{\target}  }  }
\temp

相关内容