告诉我PLZ如何使用gnuplot脚本
1)解析字符串并从中提取数字和字母/字符串?
2)是否可以使用关联数组而不使用多重IF?
files = system(sprintf("dir /b \"%s*.csv\"", inputPath))
do for [name in files]{
# MY TROUBLES IS HERE
[value, typeID] = parse(name, "*[%d%s]*"); # pseudocode
typesList = {"h": 3600, "m": 60, "s": 1};
scale = value * typesList[typeID];
# MY TROUBLES IS ABOVE
myfunc(y) = y * scale
outputName = substr(name, 0, strlen(name) - strlen(".csv"))
inputFullPath = inputPath.name
outputFullPath = outputPath.outputName.outputExt
plot inputFullPath using 1:(myfunc($2)) with lines ls 1 notitle
}
就我而言,我需要从...[d=17s]...
,...[d=2m]...
,...[d=15h]...
等格式的文件名中获取秒数
在更复杂的情况下:...[d = 2h7m31s]...
(这是一个一般情况,对我来说不太可能有用,但是知道如何解决它会很有趣)
答案 0 :(得分:4)
gnuplot不支持正则表达式,但是您可以编写一个函数,以秒为单位从文件名中提取时间。
如果您的文件名和时间戳具有严格的格式,例如像"...[d=2h7m31s]..."
一样,您可以使用以下代码。否则,您必须对其进行相应调整。
2h7m31s
提取strstrt()
部分strptime()
解析它int()
代码:
### parse special time string
NAME = "Filename[d=2h7m31s].csv"
TimeExtract(s) = int(strptime("%Hh%Mm%Ss",s[strstrt(s,'[d=')+3:strstrt(s,']')-1]))
print TimeExtract(NAME)
### end of code
结果:
7651
添加:
下面的代码还涵盖了其他可能性,只要序列为...[d=..h..m..s]...
### parse special time string
NAME = "Filename[d=2h7m31s]somethingelse.csv"
TimeString(s) = s[strstrt(s,'[d=')+3:strstrt(s,']')-1]
TimeExtractFormat(s) = \
"%Hh"[1:sgn(strstrt(TimeString(s),'h'))*3].\
"%Mm"[1:sgn(strstrt(TimeString(s),'m'))*3].\
"%Ss"[1:sgn(strstrt(TimeString(s),'s'))*3]
TimeExtract(s) = int(strptime(TimeExtractFormat(s),TimeString(s)))
print TimeExtract("Filename[d=31s]somethingelse.csv")
print TimeExtract("Filename[d=7m]somethingelse.csv")
print TimeExtract("Filename[d=2h]somethingelse.csv")
print TimeExtract("Filename[d=7m31s]somethingelse.csv")
print TimeExtract("Filename[d=2h31s]somethingelse.csv")
print TimeExtract("Filename[d=2h7m31s]somethingelse.csv")
### end of code
结果:
31
420
7200
451
7231
7651
答案 1 :(得分:1)
我通过搜索相同的目标来到您的职位:grep在文件中间的一个模式,直到一个空格,以获得可在gnuplot中使用的列表字符串。
new_plan.txt:
blabla CIC1 blabla
blabla CIC2.2-prod blabla
blabla CIC1 blabla
etc.
^要解析的文件^
gnuplot> system("cat new_plan.txt| sed -n -E 's/^.*(CIC\\S*).*$/\\1/p' |sort |uniq")
结果:
CIC1
CIC2.2-prod
烦人的事情不是-忘记对反斜杠\进行反斜杠,因为它在字符串中,因此gnuplot可以通过系统调用来调用它。
我没有回答您的标题问题,但您的最后评论是:
(这是一个一般情况,对我来说不太可能有用,但是 知道如何解决它会很有趣)