"Tim Musson" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> I keep trying to do this for different things. I have not found a
> method I like yet. So here is specifically what I am trying to do
> *this time*.
>
> My current customer has been having problems with members dropping out
> of various MS Active Directory Security Groups. So I figured I would
> toss a bit of code together in my spare time (yah, like that exists).
>
> I have the bit that dumps an LDIF file starting at a particular point
> in the AD Tree. Where I am hitting a wall is processing that LDIF
> file...
>
> Here is an example of my data (note the blank line separating dn:'s.
> ,-----
> | dn: CN=p106730,OU=Scr-Prt,OU=AB,DC=Stuff
> | ====8<---------------- snip
> | member: CN=trn,OU=Scripts,OU=AB,DC=Stuff
> | member: CN=uci,OU=Scripts,OU=AB,DC=Stuff
> | ====8<---------------- snip
> | groupType: -2147483644
> | ====8<---------------- snip
> | whenChanged: 20040927234946.0Z
> | whenCreated: 20030401203303.0Z
> | <<<< Blank Line Here
> | dn: CN=p101714_mb8,OU=Scr-Prt,OU=AB,DC=Stuff
> | ====8<---------------- snip
> | groupType: -2147483644
> | ====8<---------------- snip
> | whenChanged: 20040927234926.0Z
> | whenCreated: 20020531152229.0Z
> `-----
>
> This is what I want to keep for each (blank line separated) dn:.
> ,----- [ ]
> | dn: CN=p106730,OU=Scr-Prt,OU=AB,DC=Stuff
> | member: CN=trn,OU=Scripts,OU=AB,DC=Stuff
> | member: CN=uci,OU=Scripts,OU=AB,DC=Stuff
> | groupType: -2147483644
> |
> | dn: CN=p101714_mb8,OU=Scr-Prt,OU=AB,DC=Stuff
> | groupType: -2147483644
> `-----
>
> I know I can change the record separator to \n\n to get one dn:
> section at a time, but how do I then process the individual lines? I
> don't seem to ever have any luck setting the record separator back to
> \n...
I don't see how resetting $/ back to \n would help you once you've read
and stored the data. If you have a list of records, why can't you just
operate on that list?
#!/usr/bin/perl
use strict;
use warnings;
my @records;
{
#read the file, one 'paragraph' at a time.
local $/ = "\n\n";
open my $file, "file.txt" or die "Cannot open file: $!";
@records = <$file>;
}
#for each record, split on the newline, and keep only the lines you want
#then reconnect the lines into one record
foreach my $record (@records){
my @data = grep /^(dn|member|groupType):/, (split /\n/, $record);
$record = join "\n", @data;
}
#print the records
print join "\n\n", @records;
__END__
Note that there are several places where this could be shortened, but I
decided against playing golf this time around. :-)
Hope this helps,
Paul Lalli
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>