Thread regex ups? (6 answers)
Opened by oblivion at 2006-01-21 19:52

Dubu
 2006-01-22 15:06
#62117 #62117
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ein guter Trick hier ist es, Perls Vorstellung davon zu aendern, was eine Zeile ist. Dafuer gibt es die Variable $/.

Nachdem ich mir gerade die Ausgabe von lshal angeschaut habe, kann ich mir vorstellen, wie man sie in einen Hash bekommen koennte. Hier ist ein Vorschlag:

Code: (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
#! /usr/bin/perl -w
use strict;
use warnings;

my %Entries;
my $LsHal = '/usr/bin/lshal';

open (LSHAL, '-|',  $LsHal) or die "could not start $LsHal: $!";

# "Paragraph Mode" - ein oder mehr Leerzeilen gelten als Trenner
$/ = "";

# Die Schleide geht jetzt ueber einzelne Absaetze
while (<LSHAL>) {
   # In einzelne Zeilen aufteilen
   my ($key, @lines) = split /\n/;

   # Das 'udi = ' am Anfang der ersten Zeile
   # und die Anfuehrungszeichen loeschen
   $key =~ s/^udi\s*=\s*'(.*)'/$1/;

   # Leerzeichen am Anfang der anderen Zeilen loeschen
   s/^\s+// for @lines;

   # Einen Untereintrag fuer jede Zeile anlegen, wobei
   # der Teil vor dem ' = ' als Schluessel, der Teil dahinter
   # als Wert genommen wird.
   my %subentries = map { split /\s*=\s*/, $_, 2 } @lines;

   # Untereintraege unter $key speichern
   $Entries{$key} = \%subentries;
}

# Testausgabe
use Data::Dumper;
print Dumper \%Entries;

exit 0;
\n\n

<!--EDIT|Dubu|1137935205-->

View full thread regex ups?