Harold Castro wrote:
> Good day!
Hello,
> I'm about to transfer our ip allocation table from
> openoffice spreadsheet into an ldif format. The
> spreadsheet has 19 columns, some cells are empty
> though. So far this is what I got:
>
> #!/usr/local/bin/perl
> use warnings;
> use strict;
>
> my $input = shift @ARGV;
> my $output = shift @ARGV;
> our @attributes = ('ipNetworkNumber: ', 'Prefix: '
> ,'ipNetmaskNumber: ','Range: ', 'BID: ','PID:
> ','ipAssignedTo: '
> ,'description: ','RID: ','Region:
> ','Area: ','SID: ', 'ipAllocStatus: ','manager:
> ','ipAssignedDate: '
> ,'TID: ','ipNetworkType: ','2ndOF:
> ','inetNum: ');
>
>
> open INPUT, "$input" or die $!;
> open OUTPUT, ">$output" or die $!;
>
> while (<INPUT>){
>
> #this two takes care of empty cells
> s/:$/:NA/g;
> s/:(?=:)/:NA/g;
>
> foreach $field (split/:/, $_){
> print OUTPUT "$field ";
> }
>
> }
>
> What I wanted to do is to replace the line:
> "print OUTPUT "$field... with something that will,
> upon splitting a $field, it will pair it to the
> content of the @attributes:
>
> For example:
> I have an @array = ('favorite: ', 'lessfavorite:
> 'worstfavorite: ')
>
> then I have a line separated with colons that has:
> dog:cat:bird
>
>
> I would then split this line and pair it one by one to
> the content of the array
> e.g;
>
> favorite: dog
> lessfavorite: cat
> worstfavorite: bird
Here is one way to do it:
my @array = qw( favorite lessfavorite worstfavorite );
while ( <DATA> ) {
chomp;
my @fields = map length() ? $_ : 'NA', split /:/, $_, -1;
next unless @fields == @array;
my %pairs;
@pairs{ @array } = @fields;
print map( "$_: $pairs{$_} ", @array ), "\n";
}
__DATA__
dog:cat:bird
::
one::three
four:five:
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>