gpt4 book ai didi

regex - gnuplot:使用正则表达式解析字符串

转载 作者:行者123 更新时间:2023-12-04 00:28:00 34 4
gpt4 key购买 nike

告诉我 PLZ 如何在 gnuplot 脚本中使用

1) 解析一个字符串并从中提取一个数字和一个字母/字符串?

2)是否可以使用关联数组而不使用multi 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]...(这是一般情况,对我来说不太可能有用,但知道会很有趣如何解决)

最佳答案

gnuplot 不支持正则表达式,但您可以编写一个函数,从文件名中提取时间(以秒为单位)。如果您的文件名和时间戳具有严格的格式,例如像 "...[d=2h7m31s]..." 你可以使用下面的代码。否则你必须相应地调整它。

  1. 先用strstrt()
  2. 提取 2h7m31s部分
  3. strptime()
  4. 解析它
  5. 并使用 int()
  6. 将其制成一个整数

脚本:

### 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]...

更新:(希望是最终版本)

时间格式 %H 会在 24 小时后结束(实际上,这里是 100 小时)。所以,为了得到正确的秒数,说明符应该是%tH%tM%tS(检查帮助 time_specifiers)。有了这个,你还可以解析奇怪的格式,比如 [d=100h100m100s]

脚本:

### parse special time string
reset session

$Data <<EOD
abcd[d=31s]somethingelse.csv
efghi[d=7m]somethingelse.csv
jklmn[d=2h]somethingelse.csv
op[d=7m31s]somethingelse.csv
qr[d=2h31s]somethingelse.csv
uvw[d=2h7m]somethingelse.csv
xyz[d=2h7m31s]somethingelse.csv
aaa[d=100h100m100s]strangetime.csv
EOD

getTimeString(s) = s[strstrt(s,'[d=')+3:strstrt(s,']')-1]

getTimeFormat(s) = \
(strstrt(getTimeString(s),'h') ? '%tHh' : '').\
(strstrt(getTimeString(s),'m') ? '%tMm' : '').\
(strstrt(getTimeString(s),'s') ? '%tSs' : '')

extractTime(s) = int(strptime(getTimeFormat(s),getTimeString(s)))

do for [i=1:|$Data|] {
s = $Data[i]
print sprintf("% 12s %d",getTimeString(s),extractTime(s))
}
### end of script

结果:

         31s   31
7m 420
2h 7200
7m31s 451
2h31s 7231
2h7m 7620
2h7m31s 7651
100h100m100s 366100

关于regex - gnuplot:使用正则表达式解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822458/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com