Schrift
[thread]9052[/thread]

Suchen von Unten nach Oben: Suchen von UNTEN nach OBEN (Seite 2)



<< |< 1 2 3 4 5 6 >| >> 58 Einträge, 6 Seiten
yasukatakaya
 2007-06-04 11:58
#77100 #77100
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Hi,
ich habe den Fehler gefunden und zwar läuft es gut mit reverse, doch wenn ich ein

Code: (dl )
undef $/;


in meinem Code setze dreht er die Datei einfach nicht um?!

So sieht es bei mir am Anfang der Datei aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
$quelle = $ARGV[0];
$x = $ARGV[0];
$x =~ s/(\w+)\.\w+/$1/;
$ziel = $x;

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);


Warum kann ich nicht ohne undef $/; arbeiten??????????
renee
 2007-06-04 12:17
#77101 #77101
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weil dann der gesamte Inhalt von INPUT in einem Skalar steht und nicht in einem Array. Vergleiche:

Code (perl): (dl )
1
2
3
4
5
6
my $string = 'Hallo Welt';
$string = reverse $string;
print $string,"\n";

my @array = (1 .. 10);
print join " ", reverse @array;


siehe auch <!--pod_f1--><a href="//perldoc.perl.org/functions/reverse.html" target="_blank"><img alt="perldoc " src="/iB_html/non-cgi/Skin/SKIN-3/images/perldoc.gif" border="0"> <!--pod_f2-->perldoc -f reverse<!--pod_f3--></a><!--pod_f4-->\n\n

<!--EDIT|renee|1180945314-->
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/
yasukatakaya
 2007-06-04 13:02
#77102 #77102
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Dann mal eine andere Frage, wie suche ich in einer Datei, die ich ohne undef $/; einlese nach bestimmten Strings etc. und die ich dann auch noch bearbeiten kann z.B. steht in der Datei

Sachnummer: 12345

ich suche nach Sachnummer in der Datei und will in der Ausgabedatei 12345 ausgeben????

Danke im Voraus!!
pq
 2007-06-04 13:14
#77103 #77103
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
niemals einfach so $/ auf undef setzen! das ist eine globale variable. jedes modul,
was danach versucht, eine datei zu lesen, wird scheitern bzw. die datei falsch einlesen,
wenn es sich auf den default-wert von $/ verlässt, was es normalerweise können sollte.
Code: (dl )
1
2
3
4
5
{
 local $/; # setzt automatisch auf undef
 ...
}
# $/ ist wieder so wie vorher
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-06-04 13:15
#77104 #77104
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es wäre ganz praktisch wenn Du ganz genau beschreiben würdest, *was* Du machen willst. Am besten auch mit ein paar Beispieldaten und wie das Ergebnis aussehen soll.

Wenn Du zum Beispiel nur nach der Sachnummer suchst (ohne weitere Angaben) (ungetestet):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

my $input = 'file.txt';
my $output = 'out.txt';

open my $in, '<', $input or die $!;
open my $out, '>', $output or die $!;

while( my $line = <$in> ){
    if( $line =~ /Sachnummer: (\d+)/ ){
        print $out $1,"\n";
    }
}

close $out;
close $in;
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/
yasukatakaya
 2007-06-04 13:35
#77105 #77105
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
So hier nun eine Beispieldatei die ich durchsuchen will:
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
23.05.2007 13:11:11  UUT: MSA16_92   Start Test: T1_KENN.CBT
=============================================================================
23.05.2007 13:11:11 Start Test FRAGE_BARCODE
13:11:14 PASS
23.05.2007 13:11:14 Start Test BARCODE

Sachnummer: AATHD73141.087
Kundennummer: 12345
Flexnummer: 95.0038.9975

13:11:14 PASS
23.05.2007 13:11:14 Start Test TCK_4M
13:11:14 PASS
23.05.2007 13:11:14 Start Test D151_LU

Schiebekette defekt (IrShift)
unregelm&„áig, beginnend bei D111
Verbindung zwischen D111(TDO) und D160(TDI) pr&fen

13:11:14 FAIL

Bitte pruefen Sie folgende Punkte bei einem Schiebekettenfehler : !!
- Schalterstellung "Rest"
- Resetknopf gedrueckt, wenn SW geladen wurde

===========================================================================
13:11:14 F A I L
=============================================================================


das Ergebnis muss so aussehen:

Code: (dl )
1
2
3
4
{@BATCH|AATHD73141||GOEPEL_BSCAN||KDSNR:12345|ICT||PB/PL_P|uqm161|||
{@BTEST|9500389975|01|070523131111|||||n|n|070523131114||1|
{@RPT|Faild}
{@RPT|Schiebekette defekt (IrShift) unregelm&„áig, beginnend bei D111 Verbindung zwischen D111(TDO) und D160(TDI) pr&fen}


So und nun mein Code dazu der aber nur das ausgibt

{@BATCH|AATHD73141||GOEPEL_BSCAN||KDSNR:12345|ICT||PB/PL_P|uqm161|||
{@BTEST|9500389975|01|070523131111|||||n|n|070523131114||1|
{@RPT|Faild}

ich will aber, dass er alles ausgibt, wie oben!!

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# !bin\perl\
# AS 31.05.07

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

#~~~ Datei einlesen und TXT-Datei erzeugen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

open ($INPUT,"<$quelle") or die "konnte $ziel nicht oeffnen,$!\n";
undef $/; &nbsp
; &nbsp
; # bringt die Datei ins Skalare, ist somit leichter zu suchen
open (OUTPUT,">$ziel.txt") or die "konnte $ziel nicht oeffnen,$!\n";


# Ãœbergabe von der Input-Datei in $_
$_ = <$INPUT>;
close ($INPUT);




# damit man später in dieser suchen kann
#~~~ Ende ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#~~~ Einlesen von Seriennummer, Sachnummer, Datum (Start und Ende), Kundennummer ~~~~~~


# Sachnummer in $sachnummer speichern
($sachnummer) = /Sachnummer:\s(\w+)/sm;

($kundennummer) = /Kundennummer:\s(\w+)/sm;

($serien_nr) = /Flexnummer:\s(\d{2}.\d{4}.\d{4})/sm;
# wie bei der Sachnummer
@sd = $serien_nr =~ /(\d{2}).(\d{4}).(\d{4})/gs;
$seriennummer = $sd[0].$sd[1].$sd[2];

($startdate) = /(\d{2}.\d{2}.\d{4} \d{2}:\d{2}:\d{2}) /sm;
# wie bei der Sachnummer
@y = $startdate =~ /(\d{2}).(\d{2}).\d{2}(\d{2}) (\d{2}):(\d{2}):(\d{2})/gs;
$starttest = $y[2].$y[1].$y[0].$y[3].$y[4].$y[5];

#~~~ Ende ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#~~~ Ausgabe in Textdatei~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

if (grep (m/F A I L/, $_)) &nb
sp; &nb
sp; # sucht nach FAIL in $_ (enthält den Inhalt des Dokuments)
{
$status = "01";
$result = "Faild";
($endedate) = /(\d{2}:\d{2}:\d{2} F A I L)/sm;
@z = $endedate =~ /(\d{2}):(\d{2}):(\d{2})/gs;
$endetest = $y[2].$y[1].$y[0].$z[0].$z[1].$z[2];

#($fehler) = /PASS\s(w+)\sFAIL/gsm;
}
else
{
$status = "00";
$result = "Passed";
($endedate) = /(\d{2}:\d{2}:\d{2}\sP A S S)/sm;
@z = $endedate =~ /(\d{2}):(\d{2}):(\d{2})/gs;
$endetest = $y[2].$y[1].$y[0].$z[0].$z[1].$z[2];
}

print OUTPUT "{\@BATCH|$sachnummer||GOEPEL_BSCAN||KDSNR:$kundennummer|ICT||PB/PL_P|uqm161|||\n";
print OUTPUT "{\@BTEST|$seriennummer|$status|$starttest|||||n|n|$endetest||1|\n";
print OUTPUT "{\@RPT|$result}\n";
#print OUTPUT "{\@RPT|$fehler


#~~~ Ende ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

close OUTPUT;

# --> END of Code

renee
 2007-06-04 14:02
#77106 #77106
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ist das eine komplette Datei oder kann die Datei aus mehrere Datensätzen bestehen?
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/
yasukatakaya
 2007-06-04 14:10
#77107 #77107
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
das ist eine komplette datei!!
renee
 2007-06-04 14:47
#77108 #77108
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
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

my $input = $ARGV[0];
my %map   = (
    'F A I L' => ['faild','01'],
    'P A S S' => ['passed','00'],
);
my @parts;

{
    # lese Datei in Bloecken ein. Ein Block wird von 
    # einer Leerzeile abgeschlossen
    local $/ = "\n\n";
    
    open my $fh, '<', $input or die $!;
    @parts = <$fh>;
    close $fh;
}

my ($day,$month,$year,$start) = $parts[0]  =~ /^(\d+)\.(\d+)\.(\d+)\s*(\d+:\d+:\d+)/;
my ($kundennummer)            = $parts[1]  =~ /Kundennummer:\s*(\d+)/;
my ($sachnummer)              = $parts[1]  =~ /Sachnummer:\s*(\w+)/;
my ($flexnummer)              = $parts[1]  =~ /Flexnummer:\s*(\d+)/;
my ($uhrzeit, $result)        = $parts[-1] =~ /(\d+:\d+:\d+)\s*((?:\w\s){3}\w)/;
my $fehler               
     = join " ", split /\n/, $parts[3];
my ($res,$status)             = @{$map{$result}};

my $starttest = sprintf "%02d%02d%02d%02d%02d%02d", $year, $month, $day, split /:/,$start;
my $endetest  = sprintf "%02d%02d%02d%02d%02d%02d", $year, $month, $day, split /:/,$uhrzeit;

print  "{\@BATCH|$sachnummer||GOEPEL_BSCAN||KDSNR:$kundennummer|ICT||PB/PL_P|uqm161|||\n";
print  "{\@BTEST|$flexnummer|$status|$starttest|||||n|n|$endetest||1|\n";
print  "{\@RPT|$res}\n";
print  "{\@RPT|$fehler}" if $fehler !~ /^\d/;
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/
yasukatakaya
 2007-06-04 14:59
#77109 #77109
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Diese Variante gefällt mir nicht so (trotzdem danke für die MÜHE), wenn es mehrere Datei gibt, die dann noch ein paar Blöckchen mehr dazwischen haben, dann funktioniert es nicht so, wie ich es will, ich will es so wie meine Variante oben, doch nur das undef $/ stört, ich kann aber nicht ohne dieses arbeiten, ich weiss dann nicht wie ich die Datei sonst durchsuchen kann und danach auch noch reserven kann?!?!
<< |< 1 2 3 4 5 6 >| >> 58 Einträge, 6 Seiten



View all threads created 2007-05-31 11:57.