perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 12:33

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragLDAP Einträge in CSV-Datei holen
Seitenanfang
Hallo,

ich möchte gerne einige Einträge aus unserem LDAP (Name, Telefonnummer und Abteilung) in eine CSV-Datei umwandeln.

Das funktioniert schon mehr oder weniger gut.


use Net::LDAP;

my $ergebnis;

sub Umlauteersetzen {
my ($variable) = @_;
$variable =~ s/ä/ae/g;
$variable =~ s/ö/oe/g;
$variable =~ s/ü/üe/g;
$variable =~ s/Ä/Ae/g;
$variable =~ s/Ö/Oe/g;
$variable =~ s/Ü/Ue/g;
$variable =~ s/ß/ss/g;
return($variable);
}

open(SCHREIBEN, ">LDAP-TEST.csv") or die "Fehler beim Öffnen von 'LDAP-TEST.csv': $!\n";
$ldap = Net::LDAP->new( 'ldap://ldapserver' ) or die "$@";

$base = "o=ldap1";
$filter= "(&(ou=IT*)(telephonenumber=*))" ;

$mesg = $ldap->bind ; # an anonymous bind

$ergebnis = $ldap->search(base=>"$base",filter=>"$filter");

print SCHREIBEN "ID,Vorname,Nachname,Telefonnummer,Abteilung\n";

$max = $ergebnis->count;

$test1= "Häns";
$test2= "Dampfö";

print $test2." ".$test2."<-alt\n";
$test3= lc($test1.".".$test2);
$test3= &Umlauteersetzen($test3);
print $test3."<- neu\n";

for ( $i = 0 ; $i < $max ; $i++ ) {

$entry = $ergebnis->entry($i);
$User_ID = $entry->get_value('cn');
$Vorname = $entry->get_value('givenName');
$Nachname = $entry->get_value('sn');
$Telefon = $entry->get_value('telephoneNumber');
$Abteilung = $entry->get_value('ou');


# Änderungen der Felder

$User_ID = lc($Vorname.".".$Nachname);

print "Vorher: ".$User_ID."\n";

$User_ID =~ s/ä/ae/g;
$User_ID =~ s/ö/oe/g;
$User_ID =~ s/ü/üe/g;
$User_ID =~ s/Ä/Ae/g;
$User_ID =~ s/Ö/Oe/g;
$User_ID =~ s/Ü/Ue/g;
$User_ID =~ s/ß/ss/g;


# Schreiben

$zeile = $User_ID.",".$Vorname.",".$Nachname.",".$Telefon.",".$Abteilung."\n";

# print $i."\n";
print SCHREIBEN $zeile;


}

print "\nEs wurden ".$max." Eintraege geschrieben !\n\a";

$ldap->unbind();
$mesg = $ldap->unbind; # take down session

close(SCHREIBEN) or die "Fehler beim Schließen von 'LDAP-TEST.csv': $! \n";

Alle Daten werden schön weggeschrieben.
Allerdings möchte ich, wie im Scipt evlt. ersichtlich die Umlaute ändern. Also "ä" in "ae", Ö in oe usw.

Bin hierbei aber am Verzweifeln.
Außerhalb der "for-schleife" funktionieren nahezu alle scripte und Änderungen. Aber sobald ich z.B. die Funktion "sub Umlauteersetzen()" innerhalb der Schleife verwende geht nix mehr !

Hat einer von euch evtl. ne Idee woran das hängt ?

Datum: 29.07.2008-16:47

BeitragLösung 1
Seitenanfang
Scheinbar kommt das ganze aus dem LDAP sehr unsauber raus.

Hier das richtige Lösungsscript:


sub Umlauteersetzen {
my ($variable) = @_;

$variable =~ s/ä/ae/g; #LDAP ä
$variable =~ s/ö/oe/g; #LDAP ö
$variable =~ s/ü/ue/g; #LDAP ü
$variable =~ s/ß/ss/g; #LDAP ß

return($variable);
}

und dann entsprechend in der for-schleife:


$User_ID = &Umlauteersetzen($User_ID);

Gruß Jeypee

Datum: 29.07.2008-17:56

Beitragre: Lösung 1
Seitenanfang
Es kommt nicht unsauber aus der LDAP-Datenbank, sondern in einer anderen Kodierung, so wie es aussieht kommt es in UTF-8.
Wenn du deinen Quellcode also auch in UTF-8 schreibst und dann s/ä/ae/ anwendest, funktioniert das Ganze auch. Im Moment musst du im Musterteil von s/// zwei Zeichen eingeben da ein UTF-8-Zeichen 2 Byte lang ist.

Oder du konvertierst die Daten aus den LDAP in eine passendere Kodierung, z.Bsp. Latin-15.


$variable =~ s/ä/ae/g; #LDAP ä
$variable =~ s/ö/oe/g; #LDAP ö
$variable =~ s/ü/ue/g; #LDAP ü
$variable =~ s/ß/ss/g; #LDAP ß

Üblicherweise werden hier Hex-Escapesequenzen verwendet:

$variable =~ s/\xc3\xa4/ae/g; #LDAP ä
$variable =~ s/\xc3\xb6/oe/g; #LDAP ö
$variable =~ s/\xc3\xbc/ue/g; #LDAP ü
$variable =~ s/\xc3\x9f/ss/g; #LDAP ß

Datum: 29.07.2008-21:59

-






-
-