in reply to Re: Comparing two files one with numebers and the other one with ranges range and printing matches
in thread Comparing two files one with numebers and the other one with ranges range and printing matches

It worked perfectly

Can you just explain to me what did you do please

Thank you so much :),/p>

  • Comment on Re^2: Comparing two files one with numebers and the other one with ranges range and printing matches

Replies are listed 'Best First'.
Re^3: Comparing two files one with numebers and the other one with ranges range and printing matches
by choroba (Cardinal) on Jun 13, 2015 at 19:24 UTC
    The script first opens the second file and reads the ranges into an array of arrays. Then, it reads the first file line by line, extracts the number from the given position, and iterates over all the ranges to find the matching one(s). If it finds them, it prints the desired output, if not, it prints "no match".
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      #!/usr/bin/perl use warnings; use strict; use feature qw{ say }; unlink $outputfile; unlink $outputfile2; unlink $outputfile3; sub trimspaces { my @argsarray = @_; $argsarray[0] =~ s/^\s+//; $argsarray[0] =~ s/\s+$//; return $argsarray[0]; } open(INPUT , "< D:\\Home\\test\\imbfilelist.txt") or die $!; open(INPUT2 , "< D:\\Home\\test\\imbrange.txt") or die $!; my $n; my $value; my @ranges; my $isMatch; my $printed; my $fVersion; my %versionHash=(); while (<INPUT2>) { chomp; my ($version, $from, $to) = (split /,/)[ 1, 2, 3 ]; push @ranges, [ $from, $to, trimspaces($version)]; if (!exists $versionHash{trimspaces($version)}) { $versionHash{trimspaces($version)}=0; } } $versionHash{"No Matched"}=0; # foreach my $key (keys %fileHandleHash) # { # close $fileHandleHash{$fVersion}; # } close INPUT2; while (<INPUT>) { $isMatch=0; $n = substr($_,12-1,9); for my $r (@ranges) { if ( $n >= $r->[0] && $n <= $r->[1]) { $fVersion=$r->[2]; if (exists $versionHash{$fVersion}) { $versionHash{$fVersion}++; } $isMatch=1; last; } } if (!$isMatch) { $versionHash{"No Matched"}++; } } foreach my $key (keys %versionHash) { print STDOUT "$key IMB Count: " . $versionHash{$key} . "\n"; } close INPUT;
      I have change the code to loop throw my output looks like this:
    • folded IMB Count: 15
    • No Matched IMB Count: 1
    • selfmail IMB Count: 14
    • the range comes from here
    • imb,folded ,655575645,827544086
    • imb,selfmail ,827549192,827572977
    • and still the same list for input I now need to be able to create files for each instance: first file will be folded.txt with 15 of the original number seconde file will be nomatch.txt with the original as well and same for the third. any advice??