Blowing some white space into your command shows that there is a pattern that we might take advantage of.
plot $years $yscala
"$abc_this_01" title "" with errorbars lt rgb "$color_abc" lw 2,
"$abc_this_01" title "{/Helvetica=10 ABC_Stuff}" with lines lt rgb "$c
+olor_abc" lw 3,
"$def_this_01" title "" with errorbars lt rgb "$color_def" lw 2,
"$def_this_01" title "{/Helvetica=10 DEF_Stuff}" with lines lt rgb "$c
+olor_def" lw 3,
"$ghi_this_01" title "" with errorbars lt rgb "$color_ghi" lw 2,
"$ghi_this_01" title "{/Helvetica=10 GHI_Stuff}" with lines lt rgb "$c
+olor_ghi" lw 3,
"$jkl_this_01" title "" with errorbars lt rgb "$color_jkl" lw 2,
"$jkl_this_01" title "{/Helvetica=10 JKL_Stuff}" with lines lt rgb "$c
+olor_jkl" lw 5,
"$mno_this_01" with steps lt 1 lw 5 title "{/Helvetica=10 Abnormality
+Border}"
We could consider putting the data into a hash and then feed that into a template. I've used
sprintf here but there are many alternatives. I've made some guesses about the actual spec.
#! /usr/perl/bin
use warnings;
use strict;
my %args = (
years => 2011,
yscala => q{xxx},
sources => [
{
source => q{abc},
color => q{red},
},
{
source => q{def},
color => q{blue},
},
{
source => q{ghi},
color => q{yellow},
},
{
source => q{jkl},
color => q{green},
},
],
topic => q{this},
number => q{01},
abnormality_border => q{mno},
);
my $cmd = build_command(%args);
print $cmd;
sub build_command {
my %args = @_;
my $cmd = sprintf(
qq{plot %s %s\n\n},
$args{years},
$args{yscala}
);
for my $source (@{$args{sources}}){
$cmd .= sprintf(
qq{"C:/Stuff/%s_%s_%s.csv" title "" with errorbars lt rgb "%s_%s
+" lw 2,\n},
$source->{source},
$args{topic},
$args{number},
$source->{color},
$source->{source},
);
$cmd .= sprintf(
qq{"C:/Stuff/%s_%s_%s.csv" title "{/Helvetica=10 ABC_Stuff}" wit
+h lines lt rgb "%s_%s" lw 3,\n\n},
$source->{source},
$args{topic},
$args{number},
$source->{color},
$source->{source},
);
}
$cmd .= sprintf(
qq{"C:/Stuff/%s_%s_%s.csv" with steps lt 1 lw 5 title "{/Helvetica
+=10 Abnormality Border}"},
$args{abnormality_border},
$args{topic},
$args{number},
);
return $cmd;
}
output
plot 2011 xxx
"C:/Stuff/abc_this_01.csv" title "" with errorbars lt rgb "red_abc" lw
+ 2,
"C:/Stuff/abc_this_01.csv" title "{/Helvetica=10 ABC_Stuff}" with line
+s lt rgb "red_abc" lw 3,
"C:/Stuff/def_this_01.csv" title "" with errorbars lt rgb "blue_def" l
+w 2,
"C:/Stuff/def_this_01.csv" title "{/Helvetica=10 ABC_Stuff}" with line
+s lt rgb "blue_def" lw 3,
"C:/Stuff/ghi_this_01.csv" title "" with errorbars lt rgb "yellow_ghi"
+ lw 2,
"C:/Stuff/ghi_this_01.csv" title "{/Helvetica=10 ABC_Stuff}" with line
+s lt rgb "yellow_ghi" lw 3,
"C:/Stuff/jkl_this_01.csv" title "" with errorbars lt rgb "green_jkl"
+lw 2,
"C:/Stuff/jkl_this_01.csv" title "{/Helvetica=10 ABC_Stuff}" with line
+s lt rgb "green_jkl" lw 3,
"C:/Stuff/mno_this_01.csv" with steps lt 1 lw 5 title "{/Helvetica=10
+Abnormality Border}"
The initial hash (the data) could be kept in a separate file and read in by the script. I often find keeping the data and code separate can ease updating/maintainance. Taking it a bit further keeping the actual templates in a separate file wouldn't hurt either.
When you have it working nicely you would obviously take the white space out.
updated: added output and included the csv file.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.