Leser: 1
7 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#! /usr/bin/perl -w use strict; open ( my $fh, '<', '/home/mm/Liste.vcf' ) or die "$!"; local $/; my $file = <$fh>; close ( $fh ); my $count = 0; my%hash = (); while ( $file =~ m/BEGIN:VCARD.*?\s+N:([^;]*;[^;]*;[^;]*;[^;]*;[^;]*?)\s+.*?TEL;TYPE=CELL[^:]*:(\+?\d+).*?END:VCARD/gs ) { my $key = $1; my $value = $2; my @namen = split ( /;/, $key ); $key = "$namen[1] $namen[0]" if $namen[1] and $namen[0]; $key = $namen[0] if ! $namen[1]; $key = $namen[1] if ! $namen[0]; $hash{$key} = $value if $key && $value; } foreach ( keys %hash ) { print $_, ' ', '-' x ( 30 - length ( $_ ) ), ' ', $hash{$_}, "\n"; } __DATA__ BEGIN:VCARD VERSION:3.0 REV:2008-09-16T15:10:40Z X-EVOLUTION-FILE-AS:Nachname\, Vorname FN:Vorname Nachname N:Nachname;Vorname;;; TEL;TYPE=VOICE,OTHER:0123456789 TEL;TYPE=CELL,OTHER:0123456789 UID:pas-id-10AAAA1000000001 END:VCARD BEGIN:VCARD ...
nepos+2008-09-17 16:20:49--Hm, eventuell gehts mit Hilfe von Text::vCard noch einfacher ;)
leo11Konzeptionell würde ich aber eher das File Zeile für Zeile durchlaufen und bei Treffern mit den Stichworten die Infos mit einer einfacheren Regex über $1 herausnehmen.
HagenEs ist zwar keine sehr tolle Lösung aber vielleicht hilft das Skript von selfHTML ein (bisschen) weiter oder gibt ein paar neue Ideen:
http://www.selfhtml.net/cgiperl/sprache/objekte.ht...
leo11"Man sollte beachten, dass $1 von dem regulären Ausdruck nicht modifiziert wird, wenn er nicht matcht. In diesem Fall bedeutet es also, dass $1 noch auf einen Teil der vorherigen Zeile zeigt, wenn eine Zeile in der Datei falsches Format hat."
[Zitat betterworld] -> leicht abgewandelt
7 Einträge, 1 Seite |