Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re^2: Comparing string to array elements

by R56 (Sexton)
on Jan 11, 2017 at 18:55 UTC ( #1179415=note: print w/replies, xml ) Need Help??

in reply to Re: Comparing string to array elements
in thread Comparing string to array elements

Thank you for the reply Rolf! I'm guessing I should've put all the code instead of a little snippet, as it isn't very long.

use strict; use warnings; use File::Slurp; my $countfile = 1; open (IN, 'C:\terms.txt'); my @terms = <IN>; close IN; open (OUT,'>>C:\result.txt'); while ($countfile < 10000) { my $text = read_file('C:\file' . $countfile . '.xml') or die "Can' +t open file!"; if($text =~ /upperboundary(.+?)lowerboundary/s){ if(grep {$_ eq $1} @terms) { print OUT "$1\t"; } } close IN; $countfile++; open (IN, 'C:\file' . $countfile . '.xml') or die "End of files!"; } close OUT;

I can see the array populated if I print it, but there must be some other thing that's destroying the output at the middle...

Replies are listed 'Best First'.
Re^3: Comparing string to array elements
by toolic (Bishop) on Jan 11, 2017 at 19:04 UTC

      Added it, thanks!

Re^3: Comparing string to array elements
by R56 (Sexton) on Jan 13, 2017 at 15:03 UTC

    Ok, I was overlooking something. I was comparing a whole set of free text to an array of terms, no wonder why it didn't return anything.

    Can the solution be splitting that free text into an array, and then comparing that to the terms I already have, printing the matches?

    my @adv = split /\s+/, $1;

    How would I compare if each term in @adv matches one on @terms, and then print it if it exists?

      Why not

      • read in the terms.txt file into a scalar variable using slurp,
      • split that into an array of terms,
      • use a regex inside a foreach loop to test each term against your text?

      The example I gave you was intended to point you in this direction. My example shows how to slurp a file into a scalar variable. Then split that with something like my @terms = split ' ', $terms_text.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (2)
As of 2022-05-21 15:46 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (76 votes). Check out past polls.