String 从Gnuplot中的文件名提取数据

String 从Gnuplot中的文件名提取数据,string,variables,gnuplot,String,Variables,Gnuplot,Gnuplot有没有办法读取和识别结构化字符串?具体来说,我有几百个文件,都包含测量数据,测量条件在文件名中定义 我的文件看起来像“100d5mK2d0T.txt”,这意味着这些数据是在100.5mK温度和2.0T磁场下采集的 有没有可能从名字中提取温度和场强数据,并将它们用作绘图中的标签 提前感谢。通过gnuplot的内部字符串处理,您可以想出一个解决方案(使用substr和strstrt),但这相当冗长 最好使用外部工具进行字符串处理,如perl: filename = '100d5mK2d

Gnuplot有没有办法读取和识别结构化字符串?具体来说,我有几百个文件,都包含测量数据,测量条件在文件名中定义

我的文件看起来像“100d5mK2d0T.txt”,这意味着这些数据是在100.5mK温度和2.0T磁场下采集的

有没有可能从名字中提取温度和场强数据,并将它们用作绘图中的标签


提前感谢。

通过gnuplot的内部字符串处理,您可以想出一个解决方案(使用
substr
strstrt
),但这相当冗长

最好使用外部工具进行字符串处理,如perl:

filename = '100d5mK2d0T.txt'
str = system('echo "'.filename. '" | perl -pe ''s/(\d+)d(\d+)mK(\d+)d(\d+)T.txt/\1.\2 \3.\4/'' ')
temperature = word(str, 1)
magnetic_field = word(str, 2)

set label at graph 0.1,0.9 "Temperature: ".temperature." mK"
set label at graph 0.1,0.8 "Magnetic field: ".magnetic_field." T"

您是如何运行gnuplot脚本的——以交互方式还是反复调用一个固定的脚本?另外,您使用的是什么OS/gnuplot版本?我建议使用外部解析器。Gnuplot具有类似c的
sprintf
功能,但没有
scanf
。然而,一些字符串操作是可能的。例如
name=“100d5mK2d0T.txt”;temp=int(名称[0:3])+int(名称[5:6])/10.0;Bfield=int(name[8:9])+int(name[10:11])/10.0将执行您想要的操作,但这意味着格式是严格固定的。。。它对像
99d5mK2d05T.txt这样的字符串不起作用,谢谢你,这正是我需要的!如果你不介意的话,还有一个细节。除了有用的信息外,文件名最后还带有一些垃圾信息。类似于“49d0mKnow\u50D0MKSET\u3D00T\uD03\u1\u240\u001.dat”。所以,我想提取第二个温度和磁场,而忽略其他一切。我通过修改您的代码来做到这一点:
perl-pe's/(\d+)d(\d+)mKnow(\d+)d(\d+)mKset(\d+)d(\d+)T(\d+)T(\s)*/\1.\2\3.\4\5.\6\7/'
我对perl语法不是很熟悉,所以我只是想问一下这是否可以,或者有更好的方法吗?我对perl也不是很熟悉,只是对正则表达式。根据文件名的不同格式,对每个变量使用一个
perl
调用可能更容易,而不是将所有变量一起提取,然后在gnuplot中使用
word
将它们拆分。