Oddio, mi sono perso! Forse la terza versione non ancora! Ora la provo e ti faccio sapere!
Questo è il sorgente del mio convertitore:
#!/usr/bin/perl
use XML::Twig;
use Time::CTime;
use Text::CSV;
if ($#ARGV < 2)
{
print "Numero di argomenti errato";
exit 1;
}
my $NUMBER = '<il numero di telefono proprio>';
my $NAME = '<Il nome da visualizzare al posto del proprio numero>';
my $twig = XML::Twig->new();
my $csv = Text::CSV->new();
$twig->parsefile($ARGV[0]);
my $root = $twig->root;
if (not open MBOX, ">$ARGV[1]")
{
die "Impossibile aprire il file: Errore $!";
}
foreach my $sms ($root->children('sms'))
{
my $FROM = $sms->att('address');
if (substr($FROM, 0, 3) == "+39")
{
$FROM = substr($FROM, 3);
}
my $FROM_NAME = "";
open (CSV, "<", "$ARGV[2]") or die $!;
while (<CSV>)
{
next if ($. == 1);
if ($csv->parse($_))
{
my @columns = $csv->fields();
if ($FROM == $columns[11])
{
$FROM_NAME = $columns[2];
}
elsif ($FROM == $columns[8])
{
$FROM_NAME = $columns[8];
}
elsif ($FROM == $columns[7])
{
$FROM_NAME = $columns[7];
}
}
}
close CSV;
my $EPOCH = $sms->att('date');
my $DATE = localtime($EPOCH/1000);
my $TYPE = $sms->att('type'); #1 = Ricevuto; 2 = Inviato
my $BODY = $sms->att('body');
my $SUBJECT = $sms->att('subject');
if ($TYPE == 1)
{
print MBOX "From $FROM $DATE\n";
print MBOX "To: $OWNER_NAME <$OWNER_NUMBER>\n";
print MBOX "From: $FROM_NAME <$FROM>\n";
}
elsif ($TYPE == 2)
{
print MBOX "From $NUMBER $DATE\n";
print MBOX "To: $FROM_NAME <$FROM>\n";
print MBOX "From: $NAME <$OWNER_NUMBER>\n";
}
if ($SUBJECT == "null")
{
print MBOX "Subject: \n";
}
else
{
print MBOX "Subject: $SUBJECT\n";
}
print MBOX "Date: $DATE +0200\n";
print MBOX "\n$BODY\n\n\n";
}
close MBOX
Non ci fate caso se è ancora un po' "embrionale" perché non ho avuto tempo di rendere il codice più efficiente e di gestire gli errori di sintassi quando si richiama il programma con argomenti sbagliati od i file non esistono et cetera....
La sintassi è: "perl NOMEFILE.pl SORGENTE.XML DESTINAZIONE.mbox RUBRICA.csv"