Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

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?); } } }


Comment on Re^2: Parse txt file into array of array
Download Code
Re^3: Parse txt file into array of array
by hdb (Parson) on Jun 06, 2013 at 18:42 UTC
Re^3: Parse txt file into array of array
by kcott (Abbot) 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

    Output:

    $ pm_file_chars_to_AoA_2.pl $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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (12)
As of 2014-07-31 17:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (250 votes), past polls