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
#!/urs/bin/perl use strict; use warnings; my $file_in="test.txt"; my $file_out="out.txt"; # Dateien öffnen open(my $fhi, '<', $file_in) or die("Error open $file_in ($!)\n"); open(my $fho, '>', $file_out) or die("Error open $file_out ($!)\n"); # lese Datei zeilenweise while(my $line=<$fhi>) { # auf korrektes Format testen # und gleich das Datum holen next unless $line =~ /<([^>]+)>\w+/; my $date=$1; # Daten zerschneiden # beginnt mit 2004 oder 04 und endet vor 1003 while($line=~s/((?:2004|04).*?)(?=1003)//) { # Häppchen ausgeben print $fho "<$date>$1\n"; } } # Dateien schließen close($fho); close($fhi);
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
#!/usr/bin/perl use strict; use warnings; my $file_in="test.txt"; my $file_out="out.txt"; # Dateien öffnen open(my $fhi, '<', $file_in) or die("Error open $file_in ($!)\n"); open(my $fho, '>', $file_out) or die("Error open $file_out ($!)\n"); # lese Datei zeilenweise while(my $line=<$fhi>) { # auf korrektes Format testen # und gleich das Datum holen next unless $line =~ /<([^>]+)>([^\r\n]+)/; my ($date,$data)=($1,$2); # Daten zerschneiden # beginnt mit 2004 oder 04 und endet vor 1003 while($data=~s/((?:2004|04).*?)(?=1003)//) { # Häppchen ausgeben print $fho "<$date>$1\n"; } } # Dateien schließen close($fho); close($fhi);
1 2 3 4 5 6 7 8 9 10 11 12
my $data = q[<1385156932|22.11.2013 21:48:52>020220040818022e10030b0202020202200408180e2b10030202200408180e2b10030202020220040818022d1003080202020220040818022c1003090202020202200408180e281003010202022004081903301003150220040818022b10030e0202 <1385157053|22.11.2013 21:50:53>20040819081910033702 <1385157053|22.11.2013 21:50:55>020204087C01121003370202 <1385157132|22.11.2013 21:52:12>200421ab04641003dd02200421ab0610101003bb]; for my $line (split(/\n/, $data)) { my ($date, $line_data) = split(/>/, $line, 2); $date .= '>'; while ($line_data =~ /(?P<DATASET>(2004|04).*?)1003/g) { print $date.$+{DATASET}."\n"; } }
1
2
Sequence (?P...) not recognized in regex; marked by <-- HERE in m/(?P <-- HERE <
DATASET>(2004|04).*?)1003/ at analyser4.pl line 13.
while ($line_data =~ /(?P<DATASET>(2004|04).*?1003..)/g) {
1 2 3 4 5 6
while ($line_data =~ /(?P<DATASET>(2004|04)(?P<A>..)(?P<B>..)(?P<C>..)(?P<D>.*?)1003..)/g) { print $+{A}; print $+{B}; print $+{C}; print $+{D}; }
Guest testyDas beherrschen von Perl ist kein zwingende Voraussetzung für ein Mitgliedschaft. :-) Melde Disch einfach an, dann müssen deine Beiträge auch nicht mehr von Admins freigegeben werden.Muß mal sehen mich hier zu registrieren sobald ich perl besser verstanden habe...
Guest testyIch hätte noch zwei weiterreichende Anforderungen, evtl. kannst Du mir da ja auch noch Anregungen geben ;-)
Anforderung 1:
...
Anforderung 2:
...
Ich hoffe ist auch eingermaßen verständlich formuliert ;-)
Guest testyUnwissenheit sollte dich nicht hindern zu Fragen. Wir antworten gern, wenn du auch daraus lernst :-)Danach frage ich auch erst mal nicht mehr bis ich mich weiter eingelesen habe ;-)
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $file_in="test.txt"; # matrix mit den Werten. my @matrix; # Datei öffnen open(my $fhi, '<', $file_in) or die("Error open $file_in ($!)\n"); # lese Datei zeilenweise while(my $line=<$fhi>) { # auf korrektes Format testen # und gleich das Datum holen next unless $line =~ /<([^>]+)>([^\r\n]+)/; my ($date,$data)=($1,$2); # Daten zerschneiden # beginnt mit 2004 oder 04 und endet vor 1003 while($data=~s/(?:2004|04)(..)(..)(..)(.+?)(?=1003)//) { #matrix füllen: my ($wert_a,$pos_b,$pos_c,$wert_d)=($1,hex($2),hex($3),$4); $matrix[$pos_b][$pos_c]=$wert_d; } } # Datei schließen close($fhi); # Testausgabe mit Data::Dumper: print Dumper(\@matrix);
1 2 3
my ($source,$typ,$offset,$data)=($1,$2,hex($3),$4); my @data=unpack("(a2)*",$data); $matrix[$typ][$offset]=\@data;
1 2 3 4
my ($source,$typ,$offset,$data)=($1,$2,hex($3),$4); my @data=unpack("(a2)*",$data); my $pos=$offset; $matrix[$typ][$pos++]=shift(@data) while(@data);
1 2 3 4 5 6 7 8 9 10 11 12
my %matrix; #... my ($source,$typ,$offset,$data)=($1,$2,hex($3),$4); my @data=unpack("(a2)*",$data); my $pos=$offset; $matrix{$typ}[$pos++]=shift(@data) while(@data); #... print Dumper(\%matrix);
while ($hex =~ /(?P<DATASET>(2004|04)(?P<A>..)(?P<B>..)(?P<C>..)(?P<D>.*?)1003..)/g) {
while ($zeile =~ s/((?:2004|04).*?)(?:10){2,}(.*?)(?=1003)/${1}10$2/) {};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
20041010060437100302
200410060437100302
20041122331010060437100302
200411223310060437100302
2004112233101006044551010437100302
200411223310060445510437100302
04112233101006044551010437100302
0411223310060445510437100302
04112233101006044551010104371010100302
041122331006044551043710100302
667704112233101006044551010104371010100302
6677041122331006044551043710100302