用sprintf做数学运算

时间:2015-02-20 23:09:09

标签: printf gnuplot

为GNUplot创建标签时,从文本文件中读取,我将如何获得小时数的差异:两列中的分钟,每列包含一个H:M时间戳(例如23.42)。
例如,这会为现有标签创建两列的串联:

myDate(col1,col3)=sprintf("%s-%s",strcol(1),strcol(3))

是否可以修改它来进行日期数学运算得到类似的结果:

 timeDiffLabel(col5,col6)=sprintf(do-some-math-here,strcol(5),strcol(6))

1 个答案:

答案 0 :(得分:2)

要解析时间,请使用strptime功能:

print strptime('%H:%M', '12:34')

这将打印45240.0,这是从时间字符串中解析的秒数。

如果你像这样解析两列中的字符串,你可以减去这些值并用strftime重新格式化结果:

timeDiff(c1, c2) = strftime('%k:%M', strptime('%H:%M', strcol(c2)) - strptime('%H:%M', strcol(c1)))
plot 'test.dat' using 0:0:(timeDiff(1,2)) with labels

这原则上有效,但仅限于积极的差异。如果差异是例如-1,您将获得23,因为str*time函数适用于日期时间。

更复杂的解决方案仅使用实际格式的差异的绝对值,并为结果添加可选的-

timeDiff(c1, c2) = (diff = strptime('%H:%M', strcol(c2)) - strptime('%H:%M', strcol(c1)), (diff < 0 ? '-' : '').strftime('%k:%M', abs(diff)))
plot 'test.dat' using 0:0:(timeDiff(1,2)) with labels

所以,使用像

这样的测试文件
12:34  23:54
13:45  11:44
2:33   1:11

你得到了

enter image description here