Thread Liste in Tabellenformat umwandeln (19 answers)
Opened by Rambo at 2016-06-24 15:19

Linuxer
 2016-06-24 16:12
#184959 #184959
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
Hi,

hier ein Vorschlag, wie man die Daten strukturiert einlesen könnte:


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
# ArrayReferenz = get_datasets( FileHandle)
sub get_datasets {
  my $handle = shift;

  my @datasets;

  # read blockwise; separate at double newline
  local $/ = "\n\n";
  while ( my $dataset = <$handle> ) {

    # remove double newline from dataset
    chomp $dataset;

    # first split by newline, then at the first ':'
    # identifiers must not contain ':' themselves
    # store splitted fields in a new hash
    my %set = map { split m{\s*:\s*}, $_, 2 } split(  m{\n}, $dataset );

    # store reference to new hash in array
    push @datasets, \%set;
  }

  # return array reference
  return \@datasets;
}


damit erhält man eine Struktur:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@datasets = (
{
'SamAccountName' => 'U011004',
'ExpiryDate' => '19.12.2016 13:58:05',
'PasswordLastSet' => '20.06.2016 14:58:05',
'mail' => 'J.W@dbx.com',
'LastLogonDate' => '20.06.2016 15:01:10'
},
{
'SamAccountName' => 'U011001',
'ExpiryDate' => '23.11.2016 08:53:28',
'PasswordLastSet' => '25.05.2016 09:53:28',
'mail' => 'MM.AA@yxz.de',
'LastLogonDate' => '25.05.2016 09:53:51'
}
);


Diese Struktur kann man dann hernehmen, um damit eine Ausgabe zu befüllen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
my @fields = qw( SamAccountName ExpiryDate PasswordLastSet mail );
my $format = "%-25s %-25s %-25s %-25s\n";

# header fields
printf $format, @fields;
# underline header fields (same length as header fields
printf $format, map { '-' x length $_ }  @fields;


my $datasets = get_datasets( $handle );
for my $set ( @$datasets ) {
  my %h = %$set;
  printf $format, @h{@fields};
}


Code: (dl )
1
2
3
4
SamAccountName            ExpiryDate                PasswordLastSet           mail                     
-------------- ---------- --------------- ----
U011004 19.12.2016 13:58:05 20.06.2016 14:58:05 J.W@dbx.com
U011001 23.11.2016 08:53:28 25.05.2016 09:53:28 MM.AA@yxz.de




Die Fragmente musst Du nur noch zusammenbauen und das Format der Ausgabe Deinen Wünschen anpassen ;-)


PS/Edit: Wichtig ist, dass die Eingabedatei richtig formatiert ist und die korrekten Zeilenumbrüche hat.
Wenn das SKript auf einem Windows ausgeführt wird, sollte die Eingabedatei auch Windows-Zeilenumbrüche nutzen.
Wenn es auf einem Linux läuft, sollten es Linux-Zeilenumbrüche sein...

Edit2:
Code und Ausgabe angepasst.
Last edited: 2016-06-24 16:18:06 +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!

View full thread Liste in Tabellenformat umwandeln