Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^7: Adding text file data to hashes and array

by haukex (Archbishop)
on Feb 15, 2019 at 10:10 UTC ( [id://1229944]=note: print w/replies, xml ) Need Help??


in reply to Re^6: Adding text file data to hashes and array
in thread Adding text file data to hashes and array

$var1 ={apple-A =>[30,40,50,60]}

Note that hash keys containing a dash must be quoted - so for a hash key of "apple-A", the output you've shown isn't valid Perl, and so as I said, Data::Dumper isn't the right tool for this job. If you want to get the output exactly as you showed here, then you'll have to build the strings yourself (keeping in mind that code you write yourself won't support any advanced escaping or quoting). You're already doing this in the code in your original post, only a few minor changes are needed - if you're having trouble figuring that out, then have a look at the documentation of sprintf to figure out the changes to your printf statement. If you need a different format than what you showed here, then please show exactly what you need.

because i have to achieve the average of it as well

Perl will transparently convert between strings and numbers, so to do the average as in your other thread Retrieve average, you actually don't need to worry about numbers being stored as strings.

Replies are listed 'Best First'.
Re^8: Adding text file data to hashes and array
by Tigor (Novice) on Feb 15, 2019 at 11:10 UTC

    Thanks for the information

    I want to be myself clear while explaining the desired output that i am looking for .So i am writing it in step by step process

    Step 1:I have a text file which contains data as below

    Name Jan Feb Mar apr apple A 30 40 50 60 Orange O 40 20 30 60

    Step 2:Now,I want the output in below format

    {'apple-A'=>[30,40,50,60], 'Orange-O'=>[40,20,30,60]}

    Step 3:Once the output above is achieved average needs to be calculated for individual fruit by taking output of step 2 as input

    step 4:Now the output should look as below after calculating the average from step 2 output

    {'apple-A'=>[45], 'Orange-O'=>[37.5] }

    i would be more happy to provide information if anything required from my end

      Here is one method for obtaining the output you require in step 2. I have taken you at your word about the precise format of input and output.

      use strict; use warnings; use Test::More tests => 1; my $want = q#{'apple-A'=>[30,40,50,60], 'Orange-O'=>[40,20,30,60]}#; my @records; # Discard header <DATA>; # Loop over data for (<DATA>) { chomp; s/^\s+//; push @records, sprintf q#'%s-%s'=>[%i,%i,%i,%i]#, split / +/, $_; } # Join them my $have = join (",\n ", @records); # Enclose it $have = "{$have}"; # Test it is $have, $want; __DATA__ Name Jan Feb Mar apr apple A 30 40 50 60 Orange O 40 20 30 60

        Hi Hippo actually i want my output in below format

        {'apple-A'=>[30,40,50,60], 'Orange-O'=>[40,20,30,60]}

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2024-04-25 22:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found