Поиск символов в файлах с использованием Perl - PullRequest
0 голосов
/ 31 августа 2011

Я новичок в Perl и пытаюсь научиться этому.У меня есть два файла, «file1» и «file2», мне нужно найти, какие символы в «file1» отсутствуют в «file2» для компании A и отделов B и C.

File1

GTY
TTY 
UJK
TRE

Файл2

departmentA_companyA.try=675 UJK 88 KKR
departmentA_companyB.try=878 UJK 37 TAR
departmentA_companyC.try=764 UJK 92 PAM
departmentB_companyA.try=675 UJK 88 KKR
departmentB_companyB.try=878 UJK 37 TAR
departmentB_companyC.try=764 UJK 92 PAM
departmentC_companyA.try=675 UJK 88 KKR
departmentC_companyB.try=878 UJK 37 TAR
departmentC_companyC.try=764 UJK 92 PAM

Ответы [ 2 ]

3 голосов
/ 31 августа 2011
  1. Создать список всех символов в файле1
  2. Пройдите через файл2. Если критерии соответствуют, удалите символ из списка.

В этом случае я бы посоветовал вам использовать ключи хеша для хранения этого списка ($symbols{$symbol} = 1;). Это потому, что это легко и дешево удалить из хеша (delete $symbols{$symbol};).

Спойлер:

use strict;
use warnings;
use feature qw( say );

my %symbols;
{
   open(my $fh, '<', 'file1')
      or die("Can't open file1: $!\n");

   while (<$fh>) {
      chomp;
      ++$symbols{$_};
   }
}

{
   open(my $fh, '<', 'file2')
      or die("Can't open file2: $!\n");

   while (<$fh>) {
      chomp;
      my ($key, $val) = split /=/;
      my ($dept, $co) = split /[_\.]/, $key;
      if ($co eq 'companyA' || $dept eq 'departmentB' || 'departmentC') {
         my @symbols = split ' ', $val;
         delete @symbols{@symbols};
      }
   }
}

say for keys %symbols;
2 голосов
/ 31 августа 2011

Вы можете использовать хеш для подсчета количества раз, которое каждый символ появляется в файле, а затем распечатать те, которые имеют количество 0. 0. 1001 *

use strict;

open SYMS, $ARGV[0] || die;
open INFILE, $ARGV[1] || die;

my %symbols;

while (<SYMS>) {
    chomp;
    $symbols{$_} = 0;
}

while (<INFILE>) {
    my @F=split;
    next unless $F[0] =~ /companyA/;
    next unless $F[0] =~ /department[BC]/;
    ++$symbols{$F[1]} if (defined $symbols{$F[1]});
    ++$symbols{$F[3]} if (defined $symbols{$F[3]});
}

for my $symbol (keys %symbols) {
    print "$symbol\n" if $symbols{$symbol} == 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...