使用STATS的数据文件中的列数

时间:2016-05-03 11:32:06

标签: gnuplot

根据this question的答案,我想确定文件中的列数。

该文件如下所示:

Header,,Header2,,Header3,,
1,2,3,4,5,6
11,12,13,14,15,16

当我现在尝试使用stats命令时:

stats 'data.dat'
max_col = STATS_columns

Gnuplot给出的错误是bad data on line 1 of file data.dat显然是标题。 如果我删除标题,一切都很好,但我打算使用columnheader进行自动标注(如here所述)曲线,因此删除标题不是解决方案。

如果重要:我正在使用Windows机器。

2 个答案:

答案 0 :(得分:2)

正如评论中暗示的那样,解决方案就是简单地修改命令:

stats 'data.dat' skip 1
max_col = STATS_columns

答案 1 :(得分:0)

请注意,STATS_columns不一定会为您提供文件或数据块中的最大列数。显然,它只会为您提供第一个数据行中的列数。如果随后的行中有更多列,stats将不考虑这一点。

如果您需要知道不是常规表的最大数据列数,则以下代码(在gnuplot 5.2.5中进行了测试)对“不规则”数据块中所有行的分隔符进行计数,并告诉您最大值。好吧,可能的缺点:包含分隔符的注释行也将包括在内。必须先将文件加载到数据块。 我很高兴知道是否有更好的方法。

### maximum number of columns in datablock
reset session

$Data <<EOD
11  12  33
21  22  23  24  25
31  32  33  34  35  36  37  38  39
41  42  43  44  45
51  52
EOD

# Method with stats
stats $Data nooutput
print "STATS_columns: ", STATS_columns

# Method with counting separators
CountChar(s,c) = int(sum[Count_i=1:strlen(s)] (s[Count_i:Count_i] eq c))
ColMax = 0
Separator = "\t"
do for [i=1:|$Data|] {
    ColCount = CountChar($Data[i],Separator)+1
    ColMax = (ColCount > ColMax ? ColCount : ColMax)
}
print "Maximum Columns: ", ColMax
### end of code

结果:

STATS_columns: 3
Maximum Columns: 9