Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Perl Monk, Perl Meditation

Re^2: How to access a hash from another file

by vagabonding electron (Friar)
on Oct 14, 2011 at 15:12 UTC ( #931540=note: print w/ replies, xml ) Need Help??

in reply to Re: How to access a hash from another file
in thread How to access a hash from another file

Thank you tospo!
You mean the parameter could by saved in csv-file which could look like:

shorthand;title;indicator;name;yskala;legend THIS;This Evaluation;01;First;[:100];bottom THIS;This Evaluation;02;Second;[:100];bottom THIS;This Evaluation;15;Fifteen;[0:];top
and be read into the hash?
Of course it would simplify the build-up. I will try to accomplish this, though I have read some threads on this subject, as converting a text into a hash datastructure or Building an arbitrary-depth, multi-level hash and did not see "The Light" yet :-)
I'll try.

Definitely OT but I could not stop myself: I made a funny typo today: "sue strict; sue warnings;". Well, Perl did not do it :-)

Comment on Re^2: How to access a hash from another file
Download Code
Re^3: How to access a hash from another file
by wfsp (Abbot) on Oct 14, 2011 at 15:18 UTC
    I used to know a girl called sue strict. shudders
Re^3: How to access a hash from another file
by tospo (Hermit) on Oct 14, 2011 at 16:45 UTC
    not really. The crucial point is that the entire content of that csv file can be auto-generated in a few linew unless I'm missing something important here.
    Take this as a simple example:
    my @combinations = ( "1,1","1,2","2,1","2,2")
    my @combinations; for my $i (1..2){ for my $j (1..2) { push @combinations, "$i,$j"; } }
    I'm generating an array in this case with strings that are combinations of elements, in this case simply the number 1 and 2 but you can easily substitute that with "THIS", "THAT" and "This Evaluation", "That Evalutation" etc, which is what you have (if I remember your other thread correctly).
    In the first example, I harcode the array by typing all the combinations in my script. I could also save them to a file in csv format, as dump of the array (using Data::Dumper), or whatever format you can think of - the problem remains: I'm hardcoding all possible but entirely predictabe and therefore scriptable combinations of elements.
    In the second example, I generate all possible combinations on the fly. Again, if I remember correctly, you only need to do that to generate a file name. For that reason you don't even need to save the data to an array or a hash - you just generate the string as a combination of all the elements and then use that to open your file - job done.
    Of course, in my simple example, the second version is longer than the first, but you can easily see how that changes quickly with more elements and more combinations.
    So, if the data can be generated on the fly, do it - that's the whole point of scripting. If not, i.e. sometimes you want the scale for a "THIS" plot to be "0:" and sometimes ":100" and tehre is no way to predict it, then you have to resort to a config file (for which you can use a number of options, such as YAML or simple config format - have a look around on the CPAN).
    Hope this helps.
      Thank you tospo.
      The problem is that not each number can be combined with each evaluation name. Therefore I do need a config file. In fact I happened to populate the hash %module reading the csv-file in the following way:
      open(my $fh, "<", "parameter.csv") or die "$!"; my $header = <$fh>; while(<$fh>) { my @line = split(/;/, $_); my $t = $line[0]; ${module}{$t}{name} = $line[1]; my $n = $line[2]; ${module}{$t}{indicator}{$n}{ind} = $line[3]; ${module}{$t}{indicator}{$n}{yscala} = $line[4]; } close $fh;
      The file names in the gnuplot command are generated afterwards on the fly whereby only the names are created which are allowed by config file.
      After that I used the code from wfsp from Re^2: How to declare variables per loop in the following way:
      my @cmds; for my $number (sort keys %{${module}{$topic}{indicator}}){ my $cmd = build_command($number, %args); push @cmds, $cmd; } for (my $i=0; $i<@cmds; $i++) { if($i == 0 or $i % 2 == 0) { $cmds[$i] = "$multiplot\n\n$cmds[$i]"; } } for (my $i=0; $i<@cmds; $i++) { if($i % 2 == 1 or $i == $#cmds) { $cmds[$i] = "$cmds[$i]\n\n unset multiplot\n\n"; } } my $slurpline; for (my $i=0; $i<@cmds; $i++) { $slurpline.=$cmds[$i]; }

      The gnuplot command itself is very short now:
      open my $P, "|-", "gnuplot" or die; printflush $P qq[ $postscript $slurpline ]; close $P;

      Thanks again!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://931540]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (12)
As of 2014-03-17 13:40 GMT
Find Nodes?
    Voting Booth?

    Have you used a cryptocurrency?

    Results (349 votes), past polls