Как получить следующий код Perl для правильного запуска через файл USB256.001? - PullRequest
0 голосов
/ 27 февраля 2020

Пожалуйста, помогите мне, я новичок в Perl, и я пытаюсь открыть файл usb256.001, прочитать все внутри него и с помощью REGEX ... вывести все номера телефонов и электронные письма в соответствующие им файлы .txt , Я чувствую, что то, что я делаю, должно сделать это, но я не знаю, почему это не так.

#/usr/bin/perl
use warnings;
use strict;

my $filename = 'c:\Users\MckyW\Desktop\extract\usb256.001';

open(my $in, '<', $filename) or die $!;


while( read($in, $b, 1))
{
    open(fh, ">", "Hello.txt");
    open(fh, ">", "Hello.txt");

    if ( $b eq "([a-z0-9.]+@[a-z0-9.]+.[a-z0-9_]{2,})")
    {
        $a=<>;
        print fh $a;
    }
    elsif( $b eq "(((\d{3})?)|(\d{3}))([\s-./]?)(\d{3})([\s-./]?)(\d{4})")
    {

    }
    else
    {
        close(fh);
    }    
}

close($in);

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вам нужно прочитать книгу Обучение Perl, посмотрите на inte rnet для Perl книжная полка . Ваш оригинальный код не имеет особого смысла, я позволил себе немного изменить его.

use strict;
use warnings;
use feature 'say';

# my $filename = 'c:\Users\MckyW\Desktop\extract\usb256.001';

my $emails = 'email.txt';
my $phones = 'phone.txt';

my $re_email = qr/[\w.]+@([\w.]){2,}/;
my $re_phone = qr/\d\s+\(\d+\)\s+\d+\-\d+/;

# Uncomment bellow to read from a file usb256.001
#
#open $in, '<', $filename
#   or die "Couldn't open $filename";

open my $fh_emails, '>', $emails
    or die "Couldn't open $emails";

open my $fh_phones, '>', $phones
    or die "Couln't open $phones";

while(<DATA>) {             # Substitude DATA with $in to read from file
    chomp;
    say $fh_emails $_ if /$re_email/;
    say $fh_phones $_ if /$re_phone/;
}

close $fh_phones;
close $fh_emails;

#close $in;                 # close $in if read from file

__DATA__
1 (342) 123-4567
user1@inter.net
user.unix@somewhere.inter.net
1 (341) 123-4567
user.windows@elesewhere.inter.net
1 (417) 123-4567 ext 342
user.macos@apple.com
0 голосов
/ 27 февраля 2020

Вы должны использовать операторы регулярных выражений = ~ вместо eq и // вместо "". (Не могу проверить код без ввода ...)

#/usr/bin/perl
use warnings;
use strict;

my $filename = 'c:\Users\MckyW\Desktop\extract\usb256.001';

open(my $in, '<', $filename) or die $!;


while( read($in, $b, 1))
{
open(fh, ">", "Hello.txt");
open(fh, ">", "Hello.txt");# twice ???

if ( $b =~ /([a-z0-9.]+@[a-z0-9.]+.[a-z0-9_]{2,})/)
{
$a=<>;
print fh $a;
}
elsif( $b =~ /(((\d{3})?)|(\d{3}))([\s-./]?)(\d{3})([\s-./]?)(\d{4})/)
{

}
else
{
close(fh);
}


}

close($in);
...