Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11164[/thread]

unnötiges löschen?



<< >> 6 Einträge, 1 Seite
Gast Gast
 2008-01-21 14:54
#104980 #104980
Moin,
ich bin schon am verzweifeln, es klappt einfach nicht das unnötige in der Datei zu löschen, kann mir jemand weiterhelfen?

Hier ist die Beispieldatei:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
DUT No
Status: Passed
Measurement:17
UND SO WEITER!!!
End Sequence: CheckIdleCurrent

DUT No
Status: Passed
Measurement:9
Limits
Low:1
High:64
Comparison Type:GELE (>= <=)
CheckIdleCurrent
Status: Passed
Module Time: 0.7582257

BeginSequence: CheckIdleCurrent
Test Ruhestrom
Status: Passed
Measurement:0.0274
Units:mA
Limits
Low:0.0001
High:0.5000
Comparison Type:GELE (>= <=)
End Sequence: CheckIdleCurrent

DUT No
Status: Passed
Measurement:17
Limits
Low:1
High:64
Comparison Type:GELE (>= <=)
CheckIdleCurrent
Status: Passed
Module Time: 0.761192

BeginSequence: CheckIdleCurrent
Test Ruhestrom
Status: Passed
Measurement:0.0277
Units:mA
Limits
Low:0.0001
High:0.5000
Comparison Type:GELE (>= <=)
End Sequence: CheckIdleCurrent

DUT No
Status: Passed
Measurement:25
Limits
Low:1
High:64
Comparison Type:GELE (>= <=)
CheckIdleCurrent
Status: Passed
Module Time: 5.4065749

BeginSequence: CheckIdleCurrent
Test Ruhestrom
Status: Passed
Measurement:0.0281
Units:mA
Limits
Low:0.0001
High:0.5000
Comparison Type:GELE (>= <=)
End Sequence: CheckIdleCurrent


Jetzt versuche ich z.B. folgendes zu löschen, der Absatz fängt mit DUT No an und hört mit End Sequence: CheckIdleCurrent auf, dazwischen muss aber erkannt werden, ob der Absatz das richtige Measurement hat?
Hier wäre es z.B am Anfang der Datei steht die Measurementnummer = 17 jetzt muss weiter unten alles gelöscht werden, was von" DUT No" bis "End Sequence: CheckIdleCurrent" läuft und die Measurementnummer NICHT gleich 17 in diesem Absatz ist, also müssten die Absätze mit Measurement: 9 und Measurement: 25 gelöscht werden!
Wie kann ich dieses verwirklichen?

Gruss
renee
 2008-01-21 15:04
#104981 #104981
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
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
#!/usr/bin/perl

use strict;
use warnings;

my $file = 'dutno.txt';
my @entries;

{
   my $measure;
   local $/ = "\nDUT No\n";
   open my $fh, '<', $file or die $!;
   while( my $entry = <$fh> ){
      chomp $entry;
      my @mms = $entry =~ /Measurement:\s*([\d.]+)/;
      $measure = $mms[0] unless defined $measure;
      if( grep{ $_ == $measure }@mms ){
         $entry = "DUT No\n". $entry unless $entry =~ /^DUT No/;
         push @entries, $entry;
      }
   }
}


print $_,"\n" for @entries;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-01-22 14:20
#105022 #105022
Moin,
danke es funzt, jetzt versuche ich einen bestimmten Ordner zu öffnen und dort die Dateien, die mit Seriennummer anfangen, zu bearbeiten mit dem Prog was du geschrieben hast:

hier mein Ansatz, der aber nicht klappt:
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
opendir(DIR,"test2");
while($datei = readdir(DIR))
{
open($IN,'<',"test2/$datei");

$file = $IN;
@entries;

{
my $measure;
local $/ = "\nDUT No\n";
open my $fh, '<', $file or die $!;
while( my $entry = <$fh> )
{
chomp $entry;
@mms = $entry =~ /Measurement:\s*([\d.]+)/;
$measure = $mms[0] unless defined $measure;
if(grep{ $_ == $measure }@mms)
{
$entry = "DUT No\n". $entry unless $entry =~ /^DUT No/;
push @entries, $entry;
}
}
}

print $_,"\n" for @entries;
close OUTPUT;

}


Kannste mir noch einmal auf die Sprüge helfen?!
Danke im VOraus!
renee
 2008-01-22 14:33
#105023 #105023
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
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
my $dir = 'test2';
opendir(DIR,$dir) or die $!;
while($datei = readdir(DIR)){
my $path = $dir . '/' . $datei;
next unless -f $path;
my @entries;
{
my $measure;
local $/ = "\nDUT No\n";
open my $fh, '<', $path or die $!;
while( my $entry = <$fh> ){
chomp $entry;
@mms = $entry =~ /Measurement:\s*([\d.]+)/;
$measure = $mms[0] unless defined $measure;
if(grep{ $_ == $measure }@mms){
$entry = "DUT No\n". $entry unless $entry =~ /^DUT No/;
push @entries, $entry;
}
}
}

print $_,"\n" for @entries;
close OUTPUT;

}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-01-23 13:59
#105050 #105050
Hi,
danke nochmal, aber ich hab jetzt folgendes Problem und zwar bei einer Datei, die sich im Ordner test2 befindet, klappt das löschen, was man nich braucht, aber wenn ich mehrere Dateien im Ordner habe, dann nimmt er von der ersten Datei den Inhalt und kopiert in alle Dateien, die im Ordner liegen, d.h. überall steht das gleiche und unten wird dann nochmals der Absatz ergänzt mit den DOT No
Kannst du den Fehler auf anhieb sehen?
Hier ist nochmal dein Code von mir ein bisschen geändert!

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
my $dir = 'test2';
opendir(DIR,$dir) or die $!;

while($datei = readdir(DIR))
{
$path = $dir . '/' . $datei;
#print "\n$path\n";
next unless -f $path;
@entries;
{
$measure;
local $/ = "\nDUT No\n";
open $fh, '<', $path or die $!;
while($entry = <$fh> )
{
chomp $entry;
@mms = $entry =~ /Measurement:\s*([\d.]+)/;
$measure = $mms[0] unless defined $measure;
if(grep{ $_ == $measure }@mms)
{
$entry = "DUT No\n". $entry unless $entry =~ /^DUT No/;
push @entries, $entry;
}
}
}
open OUTPUT, '>',$path;
print OUTPUT $_,"\n" for @entries;
#print $datei;
close OUTPUT;
}
renee
 2008-01-23 14:07
#105053 #105053
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du verwendest ein "globales" Array @entries. Verwende my, wie ich es schon in der vorigen Antwort gemacht habe...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 6 Einträge, 1 Seite



View all threads created 2008-01-21 14:54.