2007/03/13

csv -> ldif

Что имеется - список адресатов с различными данными (номера телефонов, адреса, email и т.п.) в формате csv. Если есть xls (spreadsheet), его можно сохранить в csv.

Задача - создать адресную LDAP-книгу.

Чтобы занести уже имеющиеся данные в LDAP-диреторию, их необходимо представить в LDIF-формате. Ниже представлен простейший perl-скрипт, позволяющий выполнить данную операцию.

#!/usr/bin/perl
#
# This is an example of using the Text::ParseWords module to convert
# a comma-delimited file to LDIF. Requires Perl 5.005 or higher. Just
# pipe the CSV file to this script and redirect the output to a file:
#
# cat FILENAME.csv | csv2ldif.pl > FILENAME.ldif
#
# Anthony Greene
#
# Load the required module.
use Text::ParseWords;

# Set a default objectclass and suffix.
$objectclass = 'inetOrgperson';
$dnsuffix = 'ou=addressbook,o=SSC,c=LT';

# Read lines from STDIN.
while ($line = ) {
@fields = "ewords(',',0,$line);

# Output the values.
print "dn: cn=$fields[0], $dnsuffix\n";
print "cn: $fields[0]\n";
print "givenname: $fields[1]\n";
print "sn: $fields[2]\n";
print "objectclass: $objectclass\n";
print "objectclass: top\n";
print "mail: $fields[3]\n";
if ($fields[4]) { print "telephonenumber: $fields[4]\n"; }
if ($fields[5]) { print "facsimiletelephonenumber: $fields[5]\n";}
if ($fields[6]) { print "mobile: $fields[6]\n";}
if ($fields[7]) { print "street: $fields[7]\n";}
if ($fields[8]) { print "l: $fields[8]\n";}
if ($fields[9]) { print "postalcode: $fields[9]\n";}
if ($fields[10]) { print "o: $fields[10]\n";}
print "\n";
}
exit;

2 comments:

biga said...

очень хорошо. только с русскими буквами скриптик работать не будет.
в LDIF русские буквы, а также "," и "<" должны быть представлены в base64(utf8("Привет мир"))

Roman Sozinov said...

to biga:
Благодарствую :)