Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re^2: Parse txt file into array of array

by Dr Manhattan (Beadle)
on Jun 06, 2013 at 17:57 UTC ( #1037495=note: print w/replies, xml ) Need Help??

in reply to Re: Parse txt file into array of array
in thread Parse txt file into array of array

Thanks that works great! Next question- How do I reference an element if I want to splice it?

my $length = $#MainArray; for (my $x = 0; $x <= $length; $x++) + { my $smallLength = $MainArray[$#$x]; for(my $q = 0; $q <= $smallLength; $q++) { my $element = $MainArray[$x][$q]; if(some if statement concerning $element) { splice(How do I reference this part?); } } }

Replies are listed 'Best First'.
Re^3: Parse txt file into array of array
by kcott (Chancellor) on Jun 06, 2013 at 20:30 UTC

    I see hdb has shown the syntax you requested. Be aware that splice can be slow and there are often better alternatives. For instance, if you had intended to use splice to remove lowercase characters, you could have rewritten that entire block of code above as:

    for (@MainArray) { @$_ = grep { ! /[a-z]/ } @$_; }

    Here's my test:

    #!/usr/bin/env perl use strict; use warnings; use Data::Dumper; my @MainArray; # Original array populating code while (<DATA>) { chomp; push @MainArray, [ split // ]; } # New alternative to 'splice' code for (@MainArray) { @$_ = grep { ! /[a-z]/ } @$_; } print Dumper \@MainArray; __DATA__ Hello my name is Jack


    $ $VAR1 = [ [ 'H' ], [], [], [], [ 'J' ] ];

    -- Ken

      Ohke, so I now have this

      open (A1, "<An1.txt") or die "can't open"; open (A2, "<An2.txt") or die "can't open"; my @array1; my @array2; while (<A1>) { my $in = $_; chomp $in; push (@array1, [split(//, $in)]); } while (<A2>) { my $in = $_; chomp $in; push (@array2, [split(//, $in)]); } my $length = $#array1; my $total = 0; for (my $x = 0; $x <= $length; $x++) + { my $smallLength = scalar(@{$array1[$x]}); for(my $q = 0; $q <= $smallLength; $q++) { if($array1[$x][$q] =~ /^(\+|\_)$/ && $array2[$x][$q] =~ /^[A-Z +a-z]$/) { splice(@{$array2[$x]}, $q, 0, ''); } if($array2[$x][$q] =~ /^(\+|\_)$/ && $array1[$x][$q] =~ /^[A-Z +a-z]$/) { + splice(@{$array1[$x]}, $q, 0, ''); } $total++; } }

      I am trying to compare and calculate the diffence between to text files. Calculations come later in my code but that is not important. I get error message 'Use of uninitialized value in pattern match (m//)' for the 2 IF statements. Any idea why?

        Firstly, this is veering completely off-topic. Further, the default depth for viewing threads is Re^3 so most won't even view this new question. Start a new thread when you have a new question - you can always add a link to a previous thread if it has supporting information.

        You have an off-by-one error. An array of 10 elements has indices in the range 0 to 9. In the outer loop, you're checking the correct range with 0 to $#array1; in the inner loop you're checking past the end of the array: 0 to scalar(@{$array1[$x]}).

        -- Ken

Re^3: Parse txt file into array of array
by hdb (Prior) on Jun 06, 2013 at 18:42 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1037495]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (5)
As of 2017-05-27 02:59 GMT
Find Nodes?
    Voting Booth?