#!/usr/bin/perl use strict; use warnings; use IO::File; main(); sub main { my $file = '85635.txt'; my $fh = new IO::File "< $file" or die "Can't open file '$file': $!"; <$fh>; # erste Zeile überlesen; my $z2 = <$fh>; # zweite zeile lesen die "falsches Dateiformat in Zeile 2" unless $z2 =~ /ODPS_\d+_\d+/; my $z3 = <$fh>; # dritte Zeile Lesen die "falsches Dateiformat in Zeile 3" unless $z3 =~ /Date\s*(\d+\.\d+\.\d+)\s*Time\s*(\d+:\d+:\d+)/; my ($datum, $zeit) = ($1, $2); print "Datum [$datum] Zeit [$zeit]\n"; # Testausgabe my $state = 0; # Zustand: 0 = außerhalb eines DB-Blocks # 1 = innerhalb eines DB-Blocks my $dbname = ''; # Name der DB my %ergebnis = ( # Ergebnishash 'Datum' => $datum, 'Zeit' => $zeit, ); while (<$fh>) { # Rest der Datei lesen und dabei Verarbeiten # # Sind wir innerhalb eines DB-Blocks? # if ($state) { # # ist die gelesene Zeile leer? # if (/^\s*$/) { $state = 0; # Status umsetzen $dbname = ''; # DB-Namen löschen } # # anderenfalls Werte ermiteln und abspeichern: # else { /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/; push @{ $ergebnis{'DB'}->{$dbname} }, { spalte1 => $1, spalte2 => $2, spalte3 => $3, spalte4 => $4, spalte5 => $5, }; } } # # Sonst sind wir außerhalb: # else { if (/(KDY_.*\s*)$/) { $state = 1; # Status umsetzen chomp($dbname = $1); # DB-Namen löschen print "DB [$dbname]\n"; # Testausgabe } } } use Data::Dumper; $Data::Dumper::Sortkeys = 1; print Dumper \%ergebnis; }