mirror of
https://github.com/dkogan/feedgnuplot.git
synced 2025-05-06 06:21:16 +08:00
Simplified data parsing.
Instead of complicated regexes, I now simply do splits and joins. This paves the way for per-curve extraValuesPerPoint
This commit is contained in:
parent
13268a1fa8
commit
4163e24956
@ -347,8 +347,6 @@ sub interpretCommandline
|
|||||||
|
|
||||||
my $Nfields = scalar split( ' ', $options{timefmt});
|
my $Nfields = scalar split( ' ', $options{timefmt});
|
||||||
$options{timefmt_Ncols} = $Nfields;
|
$options{timefmt_Ncols} = $Nfields;
|
||||||
my $regex_str = join( '\s+', ('\S+') x $Nfields );
|
|
||||||
$options{timefmt_regex} = qr/$regex_str/;
|
|
||||||
|
|
||||||
# make sure --xlen is an integer. With a timefmt xlen goes through strptime
|
# make sure --xlen is an integer. With a timefmt xlen goes through strptime
|
||||||
# and strftime, and those are integer-only
|
# and strftime, and those are integer-only
|
||||||
@ -573,16 +571,6 @@ sub mainThread
|
|||||||
|
|
||||||
setCurveAsHistogram( $_ ) foreach (@{$options{histogram}});
|
setCurveAsHistogram( $_ ) foreach (@{$options{histogram}});
|
||||||
|
|
||||||
# regexp for a possibly floating point, possibly scientific notation number
|
|
||||||
my $numRE = '-?\d*\.?\d+(?:[Ee][-+]?\d+)?';
|
|
||||||
my $domainRE = $options{timefmt_regex} || $numRE;
|
|
||||||
|
|
||||||
|
|
||||||
# a point may be preceded by an id
|
|
||||||
my $pointRE = $options{dataid} ? '(\S+)\s+' : '()';
|
|
||||||
$pointRE .= '(' . join('\s+', ($numRE) x $valuesPerPoint) . ')';
|
|
||||||
$pointRE = qr/$pointRE/;
|
|
||||||
|
|
||||||
# set all the axis ranges
|
# set all the axis ranges
|
||||||
# If a bound isn't given I want to set it to the empty string, so I can communicate it simply to
|
# If a bound isn't given I want to set it to the empty string, so I can communicate it simply to
|
||||||
# gnuplot
|
# gnuplot
|
||||||
@ -651,18 +639,37 @@ sub mainThread
|
|||||||
# line is used)
|
# line is used)
|
||||||
# 3d plots require $options{domain}, and dictate "x y" for the domain instead of just "x"
|
# 3d plots require $options{domain}, and dictate "x y" for the domain instead of just "x"
|
||||||
|
|
||||||
|
my @fields = split;
|
||||||
|
|
||||||
if($options{domain})
|
if($options{domain})
|
||||||
{
|
{
|
||||||
/($domainRE)/go or next;
|
if( $options{timefmt} )
|
||||||
$domain[0] = $1;
|
|
||||||
$domain0_numeric = makeDomainNumeric( $domain[0] );
|
|
||||||
|
|
||||||
if($options{'3d'})
|
|
||||||
{
|
{
|
||||||
/($numRE)/go or next;
|
# no point if doing anything unless I have at least the domain and
|
||||||
$domain[1] = $1;
|
# 1 piece of data
|
||||||
|
next if @fields < $options{timefmt_Ncols}+1;
|
||||||
|
|
||||||
|
$domain[0] = join (' ', splice( @fields, 0, $options{timefmt_Ncols}) );
|
||||||
|
$domain0_numeric = makeDomainNumeric( $domain[0] );
|
||||||
}
|
}
|
||||||
elsif( $options{monotonic} )
|
elsif(!$options{'3d'})
|
||||||
|
{
|
||||||
|
# no point if doing anything unless I have at least the domain and
|
||||||
|
# 1 piece of data
|
||||||
|
next if @fields < 1+1;
|
||||||
|
|
||||||
|
$domain[0] = $domain0_numeric = shift @fields;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# no point if doing anything unless I have at least the domain and
|
||||||
|
# 1 piece of data
|
||||||
|
next if @fields < 2+1;
|
||||||
|
|
||||||
|
@domain = splice(@fields, 0, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $options{monotonic} )
|
||||||
{
|
{
|
||||||
if( defined $latestX && $domain0_numeric < $latestX )
|
if( defined $latestX && $domain0_numeric < $latestX )
|
||||||
{
|
{
|
||||||
@ -676,7 +683,6 @@ sub mainThread
|
|||||||
else
|
else
|
||||||
{ $latestX = $domain0_numeric; }
|
{ $latestX = $domain0_numeric; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -684,8 +690,7 @@ sub mainThread
|
|||||||
# $. on the data queue in that case
|
# $. on the data queue in that case
|
||||||
if(defined $dataQueue)
|
if(defined $dataQueue)
|
||||||
{
|
{
|
||||||
s/ ([\d]+)$//o;
|
$domain[0] = pop @fields;
|
||||||
$domain[0] = $1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -695,13 +700,25 @@ sub mainThread
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $id = -1;
|
my $id = -1;
|
||||||
while (/$pointRE/go)
|
|
||||||
{
|
|
||||||
if($1 ne '') {$id = $1;}
|
|
||||||
else {$id++; }
|
|
||||||
|
|
||||||
pushPoint(getCurve($id),
|
while(@fields)
|
||||||
"@domain $2\n", $domain0_numeric);
|
{
|
||||||
|
if($options{dataid})
|
||||||
|
{
|
||||||
|
last if @fields < 1 + $valuesPerPoint;
|
||||||
|
$id = shift @fields;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last if @fields < $valuesPerPoint;
|
||||||
|
$id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
pushPoint(getCurve($id),
|
||||||
|
join(' ',
|
||||||
|
@domain,
|
||||||
|
splice( @fields, 0, $valuesPerPoint ) ) . "\n",
|
||||||
|
$domain0_numeric);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user