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