Je suis en train de créer un script pour générer un fichier csv avec les résultats de certaines requêtes ldap en utilisant Net :: LDAP mais j'ai des problèmes en ignorant les lignes incomplètes si un élément du @ Le tableau d'attributs est vide.Besoin d'aide analyse des résultats de ldap à csv
my @attributes = ('cn', 'mail', 'telephoneNumber');
Ainsi, par exemple, si un utilisateur n'a pas mail ci, ou pas telephoneNumber la liste, il devrait sauter le champ de maintien au lieu de retourner:
"Foo Bar",, # this line should be skipped since there is no mail nor telephone
"Bar Foo","[email protected]", # this line should be skipped too, no number listed
"John Dever","[email protected]","12345657" # this one is fine, has all values
Ma boucle de droite est maintenant à la recherche comme celui-ci :
# Now dump all found entries
while (my $entry = $mesg->shift_entry()){
# Retrieve each fields value and print it
# if attr is multivalued, separate each value
my $current_line = ""; # prepare fresh line
foreach my $a (@attributes) {
if ($entry->exists($a)) {
my $attr = $entry->get_value($a, 'asref' => 1);
my @values = @$attr;
my $val_str = "";
if (!$singleval) {
# retrieve all values and separate them via $mvsep
foreach my $val (@values) {
if ($val eq "") { print "empty"; }
$val_str = "$val_str$val$mvsep"; # add all values to field
}
$val_str =~ s/\Q$mvsep\E$//; # eat last MV-Separator
} else {
$val_str = shift(@values); # user wants only the first value
}
$current_line .= $fieldquot.$val_str.$fieldquot; # add field data to current line
}
$current_line .= $fieldsep; # close field and add to current line
}
$current_line =~ s/\Q$fieldsep\E$//; # eat last $fieldsep
print "$current_line\n"; # print line
}
J'ai essayé le code comme:
if ($attr == "") { next; }
if (length($attr) == 0) { next; }
et plusieurs autres sans aucune chance. J'ai aussi essayé simple if() {print "isempty"; } tests de débogage et son ne fonctionne pas. Je ne suis pas exactement sûr comment pourrais-je faire cela.
J'apprécie toute aide ou des conseils que vous pourriez me donner sur ce que je fais mal.
Merci beaucoup d'avance pour votre aide.
MISE À JOUR:
sur demande du chaos:
my $singleval = 0;
renverrait une série d'échantillons pour ce programme:
Jonathan Hill,Joh[email protected],7883
John Williams,[email protected],3453
Template OAP,,
Test Account,,
Template Contracts,,
Donc ce que je veux faire est de sauter toutes les lignes Il manque un champ, soit un courriel, soit un numéro de poste.
J'ai essayé votre suggestion d'étiqueter la boucle while et d'utiliser Next Record à moins que $ attr mais il imprime encore ces lignes avec des champs vides. J'apprécie beaucoup vos suggestions! Je suis nouveau à perl et je ne savais pas que je devais utiliser eq au lieu de == pour les valeurs non numériques. Merci pour le conseil!!! –
Vous êtes les bienvenus. En regardant votre code de plus près, $ attr est une référence de tableau, donc ce sera toujours vrai. Essayez l'enregistrement suivant à moins que @ $ attr; – chaos
que le travail soit :(na pas aussi, j'ai essayé de faire si (@ eq $ attr « ») {print « vide »;} et son impression ne vide donc je pense que l'erreur est un autre endroit –