[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Sequentielle Liste in Tabelle verwandeln



Hallo Andre,


Andre Tann <atann@alphasrv.net> (Fr 30 Okt 2009 11:56:25 CET):
> Hallo zusammen,
> 
> folgende Tabelle liegt mir vor:
> 
> Name
> Straße
> PLZ Ort
> Tel: [Tel]                    < optionale Zeile
> Fax: [Fax]            < optionale Zeile
> E-Mail: [E-Mail]              < optionale Zeile
> Internet: [URL]               < optionale Zeile
> 
> Ein Adressdatensatz erstreckt sich also über mehrere Zeilen, und ist 
> vom nächsten durch eine Leerzeile getrennt.
(…)
> 
> Gibts einen Weg, wie ich das leicht umgewandelt bekomme, irgend 
> einen awk- oder Perl-Hack oder so?

Auch wenn Perl natürlich schon in einer der Antworten vorkam, ich kann's
mir trotzdem nicht verkneifen, eine weitere der möglichen Perl-Lösungen
zu schreiben. Insbesondere schreibe ich diese Lösung, weil Sie

a) die Fähigkeit Perls nutzt, einen ganzen Absatz als einen Datensatz zu
betrachen

b) Perls Fähigkeit zur formatierten Ausgabe

    #! /usr/bin/perl

    use strict;
    use warnings;
    use Data::Dumper;

    my %record;
    format STDOUT_TOP = 
    NAME       Strasse   ADDR      TEL       FAX       MAIL      URL
    ----------+---------+---------+---------+---------+---------+---------
    .
    format STDOUT = 
    @<<<<<<<<< @<<<<<<<< @<<<<<<<< @>>>>>>>> @>>>>>>>> @<<<<<<<< @<<<<<<<<
    @{record}{qw/name strasse addr tel fax mail url/}
    .

    # input record separator is an empty line
    $/ = "";

    while (<>) {

        # strip trailing whitespace
        s/\s+\n/\n/mg;

        /^(?<name>.*)\n
          (?<strasse>.*)\n
          (?<addr>.*)\n
          (?:tel:\s+(?<tel>.*)\n)?
          (?:fax:\s+(?<fax>.*)\n)?
          (?:e-mail:\s+(?<mail>.*)\n)?
          (?:internet:\s+(?<url>.*)\n)?
        /ix;

        # fill missing records
        %record = 
            (tel => "",
             fax => "",
             mail => "",
             url => "", %+);

        # … it's up to you to do anything useful here
        #    print Dumper \%record;
        #    write;

    }


    Best regards from Dresden/Germany
    Viele Grüße aus Dresden
    Heiko Schlittermann
-- 
 SCHLITTERMANN.de ---------------------------- internet & unix support -
 Heiko Schlittermann HS12-RIPE -----------------------------------------
 gnupg encrypted messages are welcome - key ID: 48D0359B ---------------
 gnupg fingerprint: 3061 CFBF 2D88 F034 E8D2  7E92 EE4E AC98 48D0 359B -

Attachment: signature.asc
Description: Digital signature


Reply to: