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

Grenzen setzen klappt nicht!



<< >> 8 Einträge, 1 Seite
Gast Gast
 2008-01-16 12:00
#104782 #104782
Moinsen,
ich kriege es einfach nicht hin die Grenzen zu setzen, ich wollte das die Datei haupt.txt nach diesem Suchmuster durchsucht wird und wenn es jedesmal gefunden wird, wird dieser Absatz in eine neue Datei geschrieben, in diesem Fall wären es 2 dateien, die noch erzeugt werden und jede ist nach der Seriennummer benannt!
Doch mein Suchmuster, das in @mach0 hinterlegt ist durchläuft nicht Absatzweise (in dieser Datei (haupt.txt)) wären es 2 Absätze, es kopiert alles von DUT No und geht bis zum letzten End Sequence: SetIdleCurrent?!
Kann mir jemand weiterhelfen?

hier die Datei haupt.txt:
Code: (dl )
1
2
3
4
5
6
7
8
DUT No
HIER STEHT VIEL ZEUG
Measurement:7667000583
End Sequence: SetIdleCurrent
DUT No
HIER STEHT VIEL ZEUG
Measurement:8888000583
End Sequence: SetIdleCurrent


und mein kleines Prog:
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
#!bin\perl	

$quelle = $ARGV[0];
$x = $ARGV[0];
$x =~ s/(\w+)\.\w+/$1/;
$ziel = $x;

#open (INPUT,"<$quell_verzeichnis$quelle") or die "konnte $ziel nicht oeffnen,$!\n";
open (INPUT,"<$quelle") or die "konnte $ziel nicht oeffnen,$!\n";
undef $/;
open (OUTPUT,">$ziel.txt") or die "konnte $ziel nicht oeffnen,$!\n";
$_ = <INPUT>;
close (INPUT);

print OUTPUT "$_";

@mach0 = s/DUT No\s(.+?)End Sequence: SetIdleCurrent\s/gsm;

foreach (@mach0)
{
($seriennummer) = /Measurement:([0-9]{10})/;
open (OUTPUT2,">$seriennummer.txt") or die "konnte $ziel nicht oeffnen,$!\n";

#Anfang der Datei
print OUTPUT2 "DUT No\n";

print OUTPUT2 @mach0;

#Ende der Datei
print OUTPUT2 "End Sequence: SetIdleCurrent";
close OUTPUT2;
}

print OUTPUT "\n";

close OUTPUT;

#~~~> END of Code
renee
 2008-01-16 12:25
#104785 #104785
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar allgemeine Hinweise:

Du solltest Wiki:[tt]use strict[/tt] und Wiki:lexikalische Filehandles verwenden.

Was soll Deiner Meinung nach
Code: (dl )
@mach0 = s/DUT No\s(.+?)End Sequence: SetIdleCurrent\s/gsm;
machen?

edit betterworld: wiki-tags gefixt
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-16 12:29
#104786 #104786
Ja das habe ich gerade auch gemerkt, da ist mir ein Fehler unterlaufen und zwar das s ist zu viel, doch das ändert nichts, der Fehler besteht immernoch!
Danach soll gesucht werden in der Textdatei, wenn dieses Muster gefunden wird, soll es in eine neue Datei geschrieben werden und wenn nochmal gefunden, wieder in eine andere Datei schreiben, doch bei mir wird von DUT No bis zum letzten End Sequence: SetIdleCurrent kopiert und in jede der Datei geschrieben, was nicht sein soll!?
Code: (dl )
@mach0 = s/DUT No\s(.+?)End Sequence: SetIdleCurrent\s/gsm;
renee
 2008-01-16 12:29
#104787 #104787
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Probier mal:
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
26
27
28
29
30
31
32
#!/usr/bin/perl

use strict;
use warnings;
use File::Copy qw(copy);

my $quelle = $ARGV[0];
my ($ziel) = $quelle =~ /(.*)\.[^.]+$/;

copy( $quelle, $ziel . '2.txt' );

my @entries;

{
   open my $in,"<",$quelle or die "konnte $quelle nicht oeffnen,$!\n";
   local $/ = "DUT No\n";
   
   while( my $entry = <$in> ){
      chomp $entry;
      next unless $entry;
      push @entries, $entry;
   }

   close $in;
}

for my $entry ( @entries ){
   my ($serial) = $entry =~ /Measurement:([0-9]{10})/;
   open my $out, '>', $serial . '.txt';
   print $out "DUT No\n",$entry;
   close $out;
}


Wichtig: Wenn Du mit Regulären Ausdrücken arbeitest, musst Du auch den =~-Operator verwenden und nicht nur =.
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-16 12:38
#104789 #104789
Danke das funzt auch!!
Doch ich würde gerne wissen, was bei meinem Code falsch ist?
Gruss
renee
 2008-01-16 12:45
#104790 #104790
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach aus @mach0 = s/DUT No\s(.+?)End Sequence: SetIdleCurrent\s/gsm; das hier:@mach0 = $_ =~ /DUT No\n(.+?)End Sequence: SetIdleCurrent/gsm;

Und aus ($seriennummer) = /Measurement:([0-9]{10})/; das hier:($seriennummer) = $_ =~ /Measurement:([0-9]{10})/;

Und aus print OUTPUT2 @mach0; das hier print OUTPUT2 $_

dann funktioniert auch Deins...
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-17 13:21
#104825 #104825
Moin,
ich hab noch ein Problem, zurest das ist die alte Datei:
Code: (dl )
1
2
3
4
5
6
7
8
DUT No
HIER STEHT VIEL ZEUG
Measurement:7667000583
End Sequence: SetIdleCurrent
DUT No
HIER STEHT VIEL ZEUG
Measurement:8888000583
End Sequence: SetIdleCurrent


wenn jetzt z.B. in der Datei weiter unten nacheinander was zur Seriennummer 7667000583 und dann was (wie gesagt nacheinander) zu 8888000583 dazugehört, wie soll ich dann das suchkriterium setzen?
hier ist die datei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DUT No
HIER STEHT VIEL ZEUG
Measurement:1
Measurement:7667000583
End Sequence: SetIdleCurrent
DUT No
HIER STEHT VIEL ZEUG
Measurement:2
Measurement:8888000583
End Sequence: SetIdleCurrent

DUT No
Hier STEHT VIEL ZEUG
Measurement:1
End Sequence: CheckIdleCurrent

DUT No
Hier STEHT VIEL ZEUG
Measurement:2
End Sequence: CheckIdleCurrent


Man kann dies zuordnen, indem man die Measurement1 gehört zu Measurement1 weiter unten usw.?

Danke im Voraus
Gruss
renee
 2008-01-17 13:30
#104826 #104826
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
du könntest hier mit hashes arbeiten...
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/
<< >> 8 Einträge, 1 Seite



View all threads created 2008-01-16 12:00.