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

Problem Schleife



<< >> 3 Einträge, 1 Seite
leissi
 2007-05-10 18:24
#76628 #76628
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hallo,

habe das Problem das eine Zeichenkette in einer Datei gefunden werden soll und danach ein Ergebnis geliefert werden soll. Nun alles klappt aber leider bringt er für jede Zeile in der er ein Teil des Strings findet ein Ergebnis. So und nun schreibt er mir in meine Ergebnisdatei für jede Zeile in der er was gefunden hat ein Ergebnis.

Hier mal der Code:

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
  sub DateiCheck 
{  
 my $DateiCheck = 0;
 
     # Hier wird das verzeichnis geöffnet und geprüft ob gesuchte Datei im Verzeichnis liegt.  
     my $DateiName1 = $DateiName;
     my $temp = $DateiName;
     my $verzeichnis = $SqlSrvJobs;
     #print
     if (existsFileInDirectory($DateiName1, $verzeichnis))
       {
       
        print LogDatei '#' x 120, "\n";
        print LogDatei '#' x 120, "\n";  
        print LogDatei "Die Datei: $DateiName1 wurde im Verzeichnis: $verzeichnis gefunden!\n";
       
            # Hier wird die Datei auf aktuelles Datum geprüft. Ergebnis wird dann ausgegeben.
            print LogDatei ("INFO : ","Der Zeitstempel der Datei wird geprüft!\n");  
            my $dir = $SqlSrvJobs;
            opendir(DIR,$dir) or die $!; # Verzeichnis "öffnen"  
            my @verzeichnisse = grep{-f $dir .'/'.$_}readdir(DIR);    
            for my $file(@verzeichnisse)
              {      

                my $file = $SqlSrvJobs2;               
                if(existsGlobalCheck($file,24))
         
                  {    
                    # Wenn Datei im Verzeichnis vorhanden, dann prüfen ob Suchstring in der Datei enthalten ist.  
                       print LogDatei "Die Datei: " . $file . "  wurde im Verzeichnis gefunden und hat ein aktuelles Datum!\n";
                       print LogDatei '+' x 120, "\n";
                    print LogDatei  "Die Datei: " . $file . " wird gelesen und geprüft!\n";
                    my $file = $SqlSrvJobs2;
                     my $check = ' R E S T O R E   D A T A B A S E   s u c c e s s f u l l y   p r o c e s s e d';
                     open (IN, $file) || die "File kann nicht geoeffnet werden !\n";
                    open my $fh,'<',$file or die $!;
                    while( my $line = <$fh> )  <<<<------- Hier an der Stelle liegt das Problem irgendwo begraben
                      {
 
                        if( $line =~ m/\Q$check\E/i)
                          {
                            $DateiCheck = 1;
                            last;
                          }
                 
                      }
                         if ($DateiCheck == 1)
                          {
                            print LogDatei "Der Suchstring in der Datei wurde gefunden!! \n";
                            print LogDatei '+' x 120, "\n";
                          }
                        else
                          {
                            print LogDatei "Der Suchstring in der Datei wurde nicht gefunden!! \n";
                          }  
                      }
                    else      
                      {                  
                        print LogDatei "Es besteht in dem Verzeichnis keine aktuelle Datei!\n";                
                        $DateiCheck = 0;
                      }
                 }      
       
       }
     else
      {
        $DateiCheck = 0;
        print LogDatei "Die Datei: $DateiName1 wurde im Verzeichnis: $verzeichnis nicht gefunden!\n";
       }  
         ## Hier wird nach Durchlauf der Kontrolle ein Statment abgegeben wenn keine aktuellen Dateien vorhanden sind!
         unless($DateiCheck)
           {
             print LogDatei "Prüfung abgebrochen, da eine der Prüfungen nicht OK war!! Bitte prüfen!!!\n";
           }  
           return $DateiCheck  # Hier wird der ermittelte Rückgabewert aus der Subroutine übergeben!
       
                     
     
                 
} # End of: sub DATEI CHECK    


Danke erstmal für die Hilfe\n\n

<!--EDIT|leissi|1178810017-->
renee
 2007-05-11 09:54
#76629 #76629
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Erstmal solltest Du $DateiCheck für jede Datei wieder auf 0 setzen. Also:
Code (perl): (dl )
1
2
3
4
             for my $file(@verzeichnisse)
              {     
               
      $DateiCheck = 0;
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/
leissi
 2007-05-11 11:45
#76630 #76630
User since
2005-07-06
84 Artikel
BenutzerIn
[default_avatar]
Hi Renee,

erstmal Danke ich habe den Fehler dann doch gefunden und zwar war dieses hier die Ursache: for my $file(@verzeichnisse)
Da in dem Verzeichnis 5 Dateien liegen, hat er 5 Mal auch die Prüfung gemacht. Nachdem ich diesen áuskommentiert hatte wird die Prüfung korrekt durchgeführt.

Gruss

Leissi
<< >> 3 Einträge, 1 Seite



View all threads created 2007-05-10 18:24.