Thread Perl - trennen nach Leerer Zeile
(6 answers)
Opened by savedxd at 2017-06-21 21:28
Wenn das in einer Variable vorliegen hast, kannst Du natürlich split() verwenden, um an der Leerzeile zu splitten und dann jeden Datensatz einzeln verarbeiten.
Code (perl): (dl
)
my @datasets = split m{\n\n}, $datenwust; Oder man nutzt Perl-Magie und lässt Perl das machen, indem man den $INPUT_RECORD_SEPARATOR entsprechend einstellt. Siehe perlvar Beispiel mit Perl-Magie und split(); am Ende hat man einen Hash-of-Hash: Code (perl): (dl
)
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #! /usr/bin/perl use strict; use warnings; use 5.010; use Data::Dumper; my %data; sub process_dataset { my ( $dataset ) = @_; my $name; my %attr; # split dataset into lines for my $line ( split m{\n}, $dataset ) { if ( my ( $k, $v ) = $line =~ m/^(.+?)\s*=\s*(.+?)$/ ) { $attr{$k} = $v; } # no assignment found; must be a name else { $name = $line; } } return $name, \%attr; } # read by dataset, localize $/ in block { local $/ = "\n\n"; while ( my $dataset = <DATA> ) { # remove $/ from dataset chomp $dataset; my ( $name, $attr ) = process_dataset( $dataset ); $data{$name} = $attr if $name; } } say Dumper \%data; __DATA__ h cool = ja schön = nein d cool = nein schön = ja b cool = nein schön = nein Resultat: Code: (dl
)
1 $VAR1 = { Last edited: 2017-06-22 00:16:29 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |