2013-10-14 15 views
0

Я пытаюсь написать скрипт Perl для анализа каталога, полного писем и имен, и извлечь адрес электронной почты и соответствующее имя.Извлечь идентификаторы электронной почты и имена с помощью perl

В данный момент я разбираю слово Email Address :, а затем извлекаю строку, но это то место, где я застрял.

данные в следующем формате:

Name    :John van 

Email Address  :[email protected] 

Мне нужно, чтобы получить эти данные в две переменные, как $name и $email.

Есть ли лучший способ проанализировать файлы, чтобы получить адрес электронной почты и имя? Как я могу справиться со струнами и упорядочить их.

Помогите пожалуйста?

+0

, пожалуйста, покажите нам короткую часть входного файла .. тогда я могу вам помочь. –

+0

Я дал выдержку файла в качестве примера в своем вопросе – user2878260

ответ

0

Там определенно более простой способ сделать это, но попробовать:

От входа:

Name: John Van 

Email Address: [email protected] 

Name: John Doe 

Email Address: [email protected] 


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

my $emails = 'email.txt'; 
open my $input, '<', $emails or die "Can't open $emails: $!"; 

my (%data, @name, @email); 
while(<$input>){ 
    push @name, $1 if /Name:\s+(.*)/; 
    push @email, $1 if /Email Address:\s+(.*)/; 
    $data{$name[$_]} = $email[$_] for 0 .. $#name; 
} 

for my $name (keys %data){ 
    my $email = $data{$name}; 
    print "$name\t$email\n" 
} 

Выходы:

John Doe [email protected] 
John Van [email protected] 
+0

Мне нужно что-то вроде: $ name = John van и $ email = [email protected] – user2878260

1

данные: (поле \ п подразумевается только для понимания)

Name    :John van\n 
\n 
Email Address  :[email protected]\n 
\n 

регулярное выражение на основе:

use Data::Dumper;  
my @data = m/Name\s*:([A-Za-z\s]*)\n\nEmail Address\s*:([A-Za-z\s]*@[A-Za-z\s]*.[A-Za-z]*)\n/g; 
print Dumper @data; 

даст

$VAR = [ 
      John van, 
      [email protected] 
     ] 

, если вы хотите сделать это линия на основе, мой подход был бы: (не проверено - sharpshoot) :)

my @data = (
       'Name    :john van', 
       '', 
       'Email Address  :[email protected]', 
       '' 
      ); 
my (@persons, $name, $email); 
my $gotName = 0; 
my $gotEmail = 0; 
while(@data) { # data is your read in filehandle 
    if (/^Name/) { 
     $name = $_; 
     $name =~ s/.*://; 
     chomp($name); 
     $gotName++; 
    } 
    if (/^Email/) { 
     $mail= $_; 
     $mail=~ s/.*://; 
     chomp($mail); 
     $gotEmail++; 
    } 
    if ($gotName == 1 and $gotEmail == 1) { 
     push(@persons, ($name,$email)); 
     $gotName = 0; 
     $gotEmail = 0; 
    } 
} 

Есть ли лучший способ проанализировать файлы, чтобы получить адрес электронной почты и имя ?

лучший способ, какой?

Как я могу справиться со струнами и упорядочить их.

есть вопросы?

Смежные вопросы