perl模块vCard

时间:2014-04-01 15:38:41

标签: perl vcard

我是perl的新手但是我的第一个脚本取得了一些成功。 我想使用模块" vCard"。

好的,按要求, 完整脚本+文件+输出。

#!/usr/bin/perl
use strict;
use warnings;

use Text::vCard::Node;
use Text::vCard;
use Text::vFile;
use vCard;
use Glib;
use Gtk2 '-init';
use Getopt::Long;
#  _      __        _       _     _      
#   \    / /       (_)     | |   | |     
#  \ \  / /_ _ _ __ _  __ _| |__ | | ___ 
#   \ \/ / _` | '__| |/ _` | '_ \| |/ _ \
#    \  / (_| | |  | | (_| | |_) | |  __/
#     \/ \__,_|_|  |_|\__,_|_.__/|_|\___|
#                                        
#                                        
### variables block
my $self='';
my $av_std_VERSION;
my $av_loc_FILENAME;
my $av_loc_VCARD;
my $av_ADDRESSES;
my $av_NODES;
my $tmp_av_STRING;
my $tmp_av_FN;
my $tmp_av_FILE;
my $tmp_av_RETURN;

# option parameters
my $av_pospar_DEBUG='';
my $av_pospar_VERBOSE='';
my $av_pospar_LOGGING='';
my $av_pospar_TEST='';
my $av_pospar_VERSION='';

#dialogelemente
my $av_WINDOW;
my $av_BUTTON;
my $av_HBOX;
my $av_VBOX;
my $av_TEXTBOX1;
my $av_LABEL1;

#filehandler
my $fh_av_VCARD;

#  ______                _   _                 
#    ____|              | | (_)                
#   |__ _   _ _ __   ___| |_ _  ___  _ __  ___ 
#    __| | | | '_ \ / __| __| |/ _ \| '_ \/ __|
#   |  | |_| | | | | (__| |_| | (_) | | | \__ \
#  _|   \__,_|_| |_|\___|\__|_|\___/|_| |_|___/
#                                              
#                                              
### functions commands block
sub schluss
{
     Gtk2->main_quit();
     exit (0);
}
sub auswertung
{
     $tmp_av_STRING = $av_TEXTBOX1->get_text();
     Gtk2->main_quit();
}

sub av_help
{
    print "Benutzung:\n";
    print "xxx.pl [-d, --debug] [-f, --file <filename>] [-h, --help] [-t, --test] [-v, --verbose] [-V, --version]\n";
    print "Bedeutung der Optionen:\n";
    print "-d, --debug := debug on\n";
    print "-f, --file := dateiname einer existierenden .vcf-datei deren Werte eingelesen werden sollen\n";
    print "-h, --help := diese Information\n";
    print "-l, --logging := log all output to file in /var/userlog/\n";
    print "-t, --test := test mode on\n";
    print "-v, --verbose, -d, --debug := verbose on + debug on\n";
    print "-V, --version := Version wird ausgegeben\n";
}
#  _____                                _   _             
#    __ \                              | | (_)            
#   |__) | __ ___ _ __   __ _ _ __ __ _| |_ _  ___  _ __  
#    ___/ '__/ _ \ '_ \ / _` | '__/ _` | __| |/ _ \| '_ \ 
#   |   | | |  __/ |_) | (_| | | | (_| | |_| | (_) | | | |
#  _|   |_|  \___| .__/ \__,_|_|  \__,_|\__|_|\___/|_| |_|
#                | |                                      
#                |_|                                      
### preparation commands block

GetOptions ("d" => \$av_pospar_DEBUG,    # debug
              "debug"   => \$av_pospar_DEBUG,      # debug
              "h"   => \&av_help,      # help
              "help"   => \&av_help,      # help
              "f=s"   => \$av_loc_FILENAME,      # file
              "file=s"   => \$av_loc_FILENAME,      # file
              "l"   => \$av_pospar_LOGGING,      # logging
              "logging"   => \$av_pospar_LOGGING,      # logging
              "t"   => \$av_pospar_TEST,      # test
              "test"   => \$av_pospar_TEST,      # test
              "v"   => \$av_pospar_VERBOSE,      # verbose
              "verbose"  => \$av_pospar_VERBOSE,   # verbose
#              "V"   => \$av_pospar_VERSION,      # version
              "version"  => \$av_pospar_VERSION)   # version
  or die("Error in command line arguments\n");

print "debug: $av_pospar_DEBUG\n";
print "file: $av_loc_FILENAME\n";
print "logging: $av_pospar_LOGGING\n";
print "test: $av_pospar_TEST\n";
print "verbose: $av_pospar_VERBOSE\n";
print "version: $av_pospar_VERSION\n";
print "alle optionen: @ARGV\n";

#  __  __       _         _____                  
#    \/  |     (_)       |  __ \                 
#   \  / | __ _ _ _ __   | |__) | __ ___   ___   
#   |\/| |/ _` | | '_ \  |  ___/ '__/ _ \ / __|  
#   |  | | (_| | | | | | | |   | | | (_) | (__ _ 
#  _|  |_|\__,_|_|_| |_| |_|   |_|  \___/ \___(_)
#                                                
#                                                
### main procedure

$av_loc_VCARD = vCard->new;

$av_loc_VCARD->load_file($av_loc_FILENAME);
print "return: $!\n";

$tmp_av_STRING = $av_loc_VCARD->as_string;
print "$tmp_av_STRING\n";

#  ______           _   _____                  
# |  ____|         | | |  __ \                 
# | |__   _ __   __| | | |__) | __ ___   ___   
# |  __| | '_ \ / _` | |  ___/ '__/ _ \ / __|  
# | |____| | | | (_| | | |   | | | (_) | (__ _ 
# |______|_| |_|\__,_| |_|   |_|  \___/ \___(_)
#                                              
#                                              
### end procedure
exit (0);

在这里您可以找到使用的vcard:

BEGIN:VCARD
VERSION:3.0
N;LANGUAGE=de:mySurname;myFirstname
FN:myFirstname mySurname
ORG:myCompany GmbH
TEL;TYPE=work:+49 (0000) 123456
ADR;TYPE=work:;;Strasse 1;Ortschaft arbeit;;56789;Deutschland
ADR;TYPE=home;PREF:;;Privatstrasse 17;Privatortschaft;;00111;Deutschland
EMAIL:info@a.de
URL:www.a.de
END:VCARD

这就是输出:

./av_perl_10.pl -v -f test_input.vcf
debug: 
file: test_input.vcf
logging: 
test: 
verbose: 1
version: 
alle optionen: 
return: 
BEGIN:VCARD
VERSION:4.0
END:VCARD

这就是我拥有的一切

此致 卡尔 - 亨氏

1 个答案:

答案 0 :(得分:0)

这有点(有点):

use 5.012;
use vCard;

my $v = vCard->new;
my $r = $v->load_file('v.vcf');
$r->other_names([]);
$r->honorific_prefixes([]);
$r->honorific_suffixes([]);
my $tmp = $r->as_string;
print "$tmp\n";

并打印

BEGIN:VCARD
VERSION:3.0
N:name;first;;;
FN:first name
ADR;TYPE=work:;;Strasse 1;Ortschaft arbeit;;56789;Deutschland
ADR;PREF=1;TYPE=home,pref:;;Strasse 2;Ortschaft 4;;12345;Deutschland
EMAIL:info@a.de
TEL;TYPE=work:+49 (0000) 123456
END:VCARD

无论如何 - 有问题的模块......

使用时,load_file方法,

my $v = vCard->new;
my $r = $v->load_file('v.vcf');

不是将文件加载到当前实例中,而是返回新的vCard 实例。如果转出返回的实例,可以检查这一点,例如使用Data::Printer模块,如:

use 5.012;
use vCard;
use DDP;

my $v = vCard->new;
my $r =  $v->load_file('v.vcf'); #not loaded into $v, but returns a new instance
p $v; #dump the "original" $v
p $r; #dump the "new" $r

返回$v

vCard  {
    Parents       Moo::Object
    public methods (22) : addresses, as_file, as_string, birthday, email_addresses, encoding_in, encoding_out, family_names, full_name, given_names, honorific_prefixes, honorific_suffixes, load_file, load_hashref, load_string, new, other_names, phones, photo, timezone, title, version
    private methods (8) : _build_address_nodes, _build_email_address_nodes, _build_name_node, _build_phone_nodes, _build_simple_nodes, _data, _setget, _simple_node_types
    internals: {
        _data          {
            version   4.0
        },
        encoding_in    "UTF-8",
        encoding_out   "UTF-8"
    }
}

表示$ r

vCard  {
    Parents       Moo::Object
    public methods (22) : addresses, as_file, as_string, birthday, email_addresses, encoding_in, encoding_out, family_names, full_name, given_names, honorific_prefixes, honorific_suffixes, load_file, load_hashref, load_string, new, other_names, phones, photo, timezone, title, version
    private methods (8) : _build_address_nodes, _build_email_address_nodes, _build_name_node, _build_phone_nodes, _build_simple_nodes, _data, _setget, _simple_node_types
    internals: {
        _data          {
            addresses            [
                [0] {
                    city        "Ortschaft arbeit",
                    country     "Deutschland",
                    extended    undef,
                    po_box      undef,
                    post_code   56789,
                    preferred   0,
                    region      undef,
                    street      "Strasse 1",
                    type        [
                        [0] "work"
                    ]
                },
                [1] {
                    city        "Ortschaft 4",
                    country     "Deutschland",
                    extended    undef,
                    po_box      undef,
                    post_code   12345,
                    preferred   1,
                    region      undef,
                    street      "Strasse 2",
                    type        [
                        [0] "home",
                        [1] "pref"
                    ]
                }
            ],
            email_addresses      [
                [0] {
                    address     "info@a.de",
                    preferred   0,
                    type        undef
                }
            ],
            family_names         [
                [0] "name"
            ],
            full_name            "first name",
            given_names          [
                [0] "first"
            ],
            honorific_prefixes   [
                [0] undef
            ],
            honorific_suffixes   [
                [0] undef
            ],
            other_names          [
                [0] undef
            ],
            phones               [
                [0] {
                    number      "+49 (0000) 123456",
                    preferred   0,
                    type        [
                        [0] "work"
                    ]
                }
            ],
            version              3.0
        },
        encoding_in    "UTF-8",
        encoding_out   "UTF-8"
    }
}

模块的另一个问题是,在加载之后,模块无法使用未定义的值,如

        honorific_prefixes   [
                [0] undef
            ],

因此需要用

初始化它们
$r->other_names([]);
$r->honorific_prefixes([]);
$r->honorific_suffixes([]);
p $r;

    honorific_prefixes   [],

正如我所说,它仍然是一个有点错误的模块。