Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

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

by poj (Abbot)
on Feb 14, 2019 at 10:25 UTC ( [id://1229905]=note: print w/replies, xml ) Need Help??


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

Make the key by joining the first 2 fields. see splice and join

foreach my $line (@lines) { $line =~ s/^\s+//; my @elements = split /\s+/, $line; my $key = join '-',splice @elements, 0, 2; # 2 col key $hash{$key} = \@elements if length($key) > 0; # no blank keys }
poj

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

    Hi Poj your code has worked for me,thank you so much but actually in the output i am gettingvar$1={'apple-A'=>['30','40','50','60']}

    How to get rid of the single quotes for the values 30,40,50,60

    input file data

    name jan feb mar apr apple 30 40 50 60 orange 25 54 45 45

    Please find the code below

    #!/usr/bin/perl use strict; use warnings; use IO::All; use Data::Dumper; my @lines = io('test_Scores.txt')->chomp->slurp; splice @lines, 0, 1; # remove first line my %hash; foreach my $line (@lines) { $line =~ s/^\s+//; my @elements = split /\s+/, $line; my $key = join '-',splice @elements, 0, 2; $hash{$key} = \@elements if length($key) > 0; } print Dumper \%hash;
      i am gettingvar$1={'apple-A'=>['30','40','50','60']}

      That is the default Data::Dumper format. Use either

      $Data::Dumper::Useqq = 1; print Dumper \%hash;

      or dump the values as your original post.

      for my $key (sort keys %hash) { printf "%-12s %s\n",$key,join ' ',@{$hash{$key}}; }
      poj

        hi poj,the two lines of code are not working

      How to get rid of the single quotes for the values 30,40,50,60

      Data::Dumper is a debugging tool, I would not use it to get consistently formatted output. Because Perl transparently converts between strings and numbers, 30 and "30" are practically the same thing, and so modules such as Data::Dumper have to more or less "guess" in which format to output such values. This kind of question actually comes up often when serializing Perl data structures, and usually the solution ends up being some custom code (one example: Cpanel::JSON::XS::Type).

      So I guess the question is, why do you need the output in this format, and could you give a longer specification of the expected output format?

        Hi haukex,actually i want the data in below format

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

        because i have to achieve the average of it as well, once the output is in that format.one of the reason is i was instructed to do achieve output in that way.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-19 20:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found