Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

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 (Canon) 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]
[Corion]: Yay. Traditional finance situation averted. Bonds can be quoted in amounts (1_000_000 EUR) or per unit (1 unit). And a traditional error is to trade 2_000_000 piece when you meant to trade 2_000_000 EUR.
[Corion]: (one of my scripts simply catches high amounts and I phone people making that trade, ideally before the payment is due)
[Corion]: The sad thing is that my script sits at the end of the pipeline and can only look at the payments due today or tomorrow basically, while there are many more systems further up in the pipeline
[GotToBTru]: better late than never, I guess

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (13)
As of 2017-03-29 11:29 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (347 votes). Check out past polls.