while (<LDAP>) {
# On initialise le séparateur d'enregistrement
local $/ = "";
$bloc = <LDAP>;
# On supp les sauts de ligne pour être en mesure de lire ligne à #
ligne et on stock le résultat dans un tableau
@res = split (/\n/, $bloc);
foreach $i (@res) {
if ($i =~ /^cn: (.*)$/i) { $cn=$1; }
if ($i =~ /^sn: (.*)$/i) { $sn=$1; }
if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); }
}
print "$cn;$sn;;@mail\n";
undef ($cn);
undef ($sn);
undef (@mail);
}
close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée
mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Je n'ai pas débuggé votre programme, mais qq chose comme cela
(sans trop de contôles également ;-) ) me semble plus simple:
use strict;
use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
while ( <LDAP> ) {
my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/;
my @mail = $_ =~ /mail: (.+)n/g;
print $cn,$sn,@mail;
}
close LDAP;
Cordialement
Stéphane
"Georges Kosto" <gkosto_todelete_@noos.fr> a écrit dans le
message de news:
4651e9c4$0$3878$79c14f64@nan-newsreader-05.noos.net...
Bonsoir,
Je voudrais comprendre le comportement d'un script qui permet
d'extraire les entrées d'un fichier ldif (filtré) pour les
formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données :
--------------------------------------------------------------
while (<LDAP>) {
# On initialise le séparateur d'enregistrement
local $/ = "";
$bloc = <LDAP>;
# On supp les sauts de ligne pour être en mesure de lire ligne
à # ligne et on stock le résultat dans un tableau
@res = split (/n/, $bloc);
foreach $i (@res) {
if ($i =~ /^cn: (.*)$/i) { $cn=$1; }
if ($i =~ /^sn: (.*)$/i) { $sn=$1; }
if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); }
}
print "$cn;$sn;;@mailn";
undef ($cn);
undef ($sn);
undef (@mail);
}
close(LDAP);
Alors le comportement est simple, la première entrée est bien
formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement
adapter mon parser.
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
kurtz le pirate
In article <4651e9c4$0$3878$, Georges Kosto wrote:
Bonsoir, Je voudrais comprendre le comportement d'un script qui permet d'extraire les entrées d'un fichier ldif (filtré) pour les formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données : --------------------------------------------------------------
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Je n'ai pas débuggé votre programme, mais qq chose comme cela
(sans trop de contôles également ;-) ) me semble plus simple:
use strict;
use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
while ( <LDAP> ) {
my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/;
my @mail = $_ =~ /mail: (.+)n/g;
print $cn,$sn,@mail;
}
close LDAP;
Cordialement
Stéphane
"Georges Kosto" <gkosto_todelete_@noos.fr> a écrit dans le
message de news:
4651e9c4$0$3878$79c14f64@nan-newsreader-05.noos.net...
Bonsoir,
Je voudrais comprendre le comportement d'un script qui permet
d'extraire les entrées d'un fichier ldif (filtré) pour les
formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données :
--------------------------------------------------------------
while (<LDAP>) {
# On initialise le séparateur d'enregistrement
local $/ = "";
$bloc = <LDAP>;
# On supp les sauts de ligne pour être en mesure de lire ligne
à # ligne et on stock le résultat dans un tableau
@res = split (/n/, $bloc);
foreach $i (@res) {
if ($i =~ /^cn: (.*)$/i) { $cn=$1; }
if ($i =~ /^sn: (.*)$/i) { $sn=$1; }
if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); }
}
print "$cn;$sn;;@mailn";
undef ($cn);
undef ($sn);
undef (@mail);
}
close(LDAP);
Alors le comportement est simple, la première entrée est bien
formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement
adapter mon parser.
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
giganet
Je n'ai pas débuggé votre programme, mais qq chose comme cela (sans trop de contôles également ;-) ) me semble plus simple:
use strict; use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; while ( <LDAP> ) { my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/; my @mail = $_ =~ /mail: (.+)n/g; print $cn,$sn,@mail; } close LDAP;
Cordialement Stéphane
"Georges Kosto" a écrit dans le message de news: 4651e9c4$0$3878$
Bonsoir, Je voudrais comprendre le comportement d'un script qui permet d'extraire les entrées d'un fichier ldif (filtré) pour les formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données : --------------------------------------------------------------
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn par exemple). Moi je ferais plutot :
use strict; use English;
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; my $cn,$sn; my @mails = (); while ( my $ligne = <LDAP> ) { if ($ligne =~ /^ *$/) { print $cn,$sn,@mail; } else { if ($ligne =~ /^(.+): (.*)$/) { if ($1 eq "mail") { push @mails, $2; } elsif ($1 eq "cn") { $cn = $2; } elsif ($1 eq "sn") { $sn = $2; } } } close LDAP;
Je n'ai pas débuggé votre programme, mais qq chose comme cela
(sans trop de contôles également ;-) ) me semble plus simple:
use strict;
use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
while ( <LDAP> ) {
my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/;
my @mail = $_ =~ /mail: (.+)n/g;
print $cn,$sn,@mail;
}
close LDAP;
Cordialement
Stéphane
"Georges Kosto" <gkosto_todelete_@noos.fr> a écrit dans le
message de news:
4651e9c4$0$3878$79c14f64@nan-newsreader-05.noos.net...
Bonsoir,
Je voudrais comprendre le comportement d'un script qui permet
d'extraire les entrées d'un fichier ldif (filtré) pour les
formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données :
--------------------------------------------------------------
while (<LDAP>) {
# On initialise le séparateur d'enregistrement
local $/ = "";
$bloc = <LDAP>;
# On supp les sauts de ligne pour être en mesure de lire ligne
à # ligne et on stock le résultat dans un tableau
@res = split (/n/, $bloc);
foreach $i (@res) {
if ($i =~ /^cn: (.*)$/i) { $cn=$1; }
if ($i =~ /^sn: (.*)$/i) { $sn=$1; }
if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); }
}
print "$cn;$sn;;@mailn";
undef ($cn);
undef ($sn);
undef (@mail);
}
close(LDAP);
Alors le comportement est simple, la première entrée est bien
formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement
adapter mon parser.
Merci,
Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn
par exemple).
Moi je ferais plutot :
use strict;
use English;
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
my $cn,$sn;
my @mails = ();
while ( my $ligne = <LDAP> ) {
if ($ligne =~ /^ *$/) {
print $cn,$sn,@mail;
} else {
if ($ligne =~ /^(.+): (.*)$/) {
if ($1 eq "mail") {
push @mails, $2;
} elsif ($1 eq "cn") {
$cn = $2;
} elsif ($1 eq "sn") {
$sn = $2;
}
}
}
close LDAP;
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn par exemple). Moi je ferais plutot :
use strict; use English;
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; my $cn,$sn; my @mails = (); while ( my $ligne = <LDAP> ) { if ($ligne =~ /^ *$/) { print $cn,$sn,@mail; } else { if ($ligne =~ /^(.+): (.*)$/) { if ($1 eq "mail") { push @mails, $2; } elsif ($1 eq "cn") { $cn = $2; } elsif ($1 eq "sn") { $sn = $2; } } } close LDAP;
Georges Kosto
Je n'ai pas débuggé votre programme, mais qq chose comme cela (sans trop de contôles également ;-) ) me semble plus simple:
use strict; use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; while ( <LDAP> ) { my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/; my @mail = $_ =~ /mail: (.+)n/g; print $cn,$sn,@mail; } close LDAP;
Cordialement Stéphane
"Georges Kosto" a écrit dans le message de news: 4651e9c4$0$3878$
Bonsoir, Je voudrais comprendre le comportement d'un script qui permet d'extraire les entrées d'un fichier ldif (filtré) pour les formater en csv.
Donc, j'ai un fichier en entrée contenant ce type de données : --------------------------------------------------------------
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn par exemple). Moi je ferais plutot :
use strict; use English;
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; my $cn,$sn; my @mails = (); while ( my $ligne = <LDAP> ) { if ($ligne =~ /^ *$/) { print $cn,$sn,@mail; } else { if ($ligne =~ /^(.+): (.*)$/) { if ($1 eq "mail") { push @mails, $2; } elsif ($1 eq "cn") { $cn = $2; } elsif ($1 eq "sn") { $sn = $2; } } } close LDAP;
Ok je suis super favorable à ta solution, car en effet les attributs apparaissent dans un ordre différent d'une entrée à l'autre. Cependant, dans le cas où l'on obtient la même séquence, la solution de Stéphane est super également.
Pour ma part j'ai aussi résolut le problème ...
open(LDAP, "<$ldif_file"); local $/ = ""; while ($bloc = <LDAP>) { @res = split (/n/, $bloc); ....
Bref, Perl c'est cool, on a tous un point de vue "possible".
Merci pour toutes vos réponses.
Georges
Je n'ai pas débuggé votre programme, mais qq chose comme cela (sans
trop de contôles également ;-) ) me semble plus simple:
use strict;
use English;
($RS,$OFS,$ORS) = ("",';',"n");
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
while ( <LDAP> ) {
my ($cn,$sn) = $_ =~ /cn: (.+)nsn: (.+)n/;
my @mail = $_ =~ /mail: (.+)n/g;
print $cn,$sn,@mail;
}
close LDAP;
Cordialement
Stéphane
"Georges Kosto" <gkosto_todelete_@noos.fr> a écrit dans le message de
news: 4651e9c4$0$3878$79c14f64@nan-newsreader-05.noos.net...
Bonsoir,
Je voudrais comprendre le comportement d'un script qui permet
d'extraire les entrées d'un fichier ldif (filtré) pour les formater
en csv.
Donc, j'ai un fichier en entrée contenant ce type de données :
--------------------------------------------------------------
while (<LDAP>) {
# On initialise le séparateur d'enregistrement
local $/ = "";
$bloc = <LDAP>;
# On supp les sauts de ligne pour être en mesure de lire ligne à #
ligne et on stock le résultat dans un tableau
@res = split (/n/, $bloc);
foreach $i (@res) {
if ($i =~ /^cn: (.*)$/i) { $cn=$1; }
if ($i =~ /^sn: (.*)$/i) { $sn=$1; }
if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); }
}
print "$cn;$sn;;@mailn";
undef ($cn);
undef ($sn);
undef (@mail);
}
close(LDAP);
Alors le comportement est simple, la première entrée est bien
formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon
parser.
Merci,
Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn
par exemple).
Moi je ferais plutot :
use strict;
use English;
print 'cn;sn;mail';
open LDAP,'<',$ARGV[0];
my $cn,$sn;
my @mails = ();
while ( my $ligne = <LDAP> ) {
if ($ligne =~ /^ *$/) {
print $cn,$sn,@mail;
} else {
if ($ligne =~ /^(.+): (.*)$/) {
if ($1 eq "mail") {
push @mails, $2;
} elsif ($1 eq "cn") {
$cn = $2;
} elsif ($1 eq "sn") {
$sn = $2;
}
}
}
close LDAP;
Ok je suis super favorable à ta solution, car en effet les attributs
apparaissent dans un ordre différent d'une entrée à l'autre.
Cependant, dans le cas où l'on obtient la même séquence, la solution de
Stéphane est super également.
Pour ma part j'ai aussi résolut le problème ...
open(LDAP, "<$ldif_file");
local $/ = "";
while ($bloc = <LDAP>) {
@res = split (/n/, $bloc);
....
Bref, Perl c'est cool, on a tous un point de vue "possible".
while (<LDAP>) { # On initialise le séparateur d'enregistrement local $/ = ""; $bloc = <LDAP>; # On supp les sauts de ligne pour être en mesure de lire ligne à # ligne et on stock le résultat dans un tableau @res = split (/n/, $bloc); foreach $i (@res) { if ($i =~ /^cn: (.*)$/i) { $cn=$1; } if ($i =~ /^sn: (.*)$/i) { $sn=$1; } if ($i =~ /^mail: (.*)$/i) { push(@mail,$1); } } print "$cn;$sn;;@mailn"; undef ($cn); undef ($sn); undef (@mail); } close(LDAP);
Alors le comportement est simple, la première entrée est bien formatée mais ensuite, la ligne cn est supprimée !!!
Je voudrais simplement savoir pourquoi et éventuellement adapter mon parser.
Merci, Georges.
Moi je ne ferais pas ça car l'ordre d'apparition n'est pas sûr (cn et sn par exemple). Moi je ferais plutot :
use strict; use English;
print 'cn;sn;mail'; open LDAP,'<',$ARGV[0]; my $cn,$sn; my @mails = (); while ( my $ligne = <LDAP> ) { if ($ligne =~ /^ *$/) { print $cn,$sn,@mail; } else { if ($ligne =~ /^(.+): (.*)$/) { if ($1 eq "mail") { push @mails, $2; } elsif ($1 eq "cn") { $cn = $2; } elsif ($1 eq "sn") { $sn = $2; } } } close LDAP;
Ok je suis super favorable à ta solution, car en effet les attributs apparaissent dans un ordre différent d'une entrée à l'autre. Cependant, dans le cas où l'on obtient la même séquence, la solution de Stéphane est super également.
Pour ma part j'ai aussi résolut le problème ...
open(LDAP, "<$ldif_file"); local $/ = ""; while ($bloc = <LDAP>) { @res = split (/n/, $bloc); ....
Bref, Perl c'est cool, on a tous un point de vue "possible".