Schrift
[thread]5932[/thread]

Subroutinen: Wie macht man das?



<< >> 5 Einträge, 1 Seite
Rambo
 2003-11-28 21:15
#73163 #73163
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Hallo,
ich habe folgendes Script
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
use warnings; 
use diagnostics;
use Archive::Zip;
use Archive::Zip::MemberRead;

$String = "strict";   #Such String

@file = glob ("*.zip");
foreach $file (@file){
$zip = new Archive::Zip($file);
print "$file\n";
} #Liste der *.ZIP Dateien
@file2 = qw (PIXX_SRV_LF5.LOG
            PIXX_SRV_LF5.LOG.1
            Datei.log
           ); #Verschieden Dateien im ZIP Archive
foreach $file2 (@file2){
$fh  = new Archive::Zip::MemberRead($zip, $file2);
$zeile = 0;
print "$file2\n";
}
while (defined($line = $fh->getline())) {
chomp($line);
++$zeile;
if ($line =~ /$String/) {
print "Found in Line $zeile: $line\n in ZipFile $file File $file2\n";
$fh->close();

    }
}


welches nur zum Teil geht.
ich vermute das man hier Teile in einer Subroutine Setzen muss weis aber nicht wie ich das anstellen muss.

kann mir jemand dazu was erklären
danke schon mal im voraus
renee
 2003-11-28 23:29
#73164 #73164
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
es wäre schön, wenn Du sagen würdest, was (welcher Teil) geht und was nicht...

Aber was mir auffällt:
Du machst vieles in einer foreach-Schleife,
benutzt eine Variable, die Du in der foreach-Schleife belegst, erst später...

z.B.

Du machst $zip = new Archive::Zip($file);

und willst dann mit MemberRead eine Datei aus dem zip-File lesen. $zip gilt jetzt aber nur für den letzten Dateinamen aus @file.

Ich nehme jetzt mal an (ohne den genauen Fehler zu kennnen), dass Du einfach die zwei foreach-Schleifen in einander schachteln musst!
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/
Rambo
 2003-11-28 23:49
#73165 #73165
User since
2003-08-14
803 Artikel
BenutzerIn

user image
hi,
folgendes funktioniert:
Code: (dl )
1
2
3
4
5
file = glob ("*.zip");
foreach $file (@file){
          $zip = new Archive::Zip($file);
          print "$file\n";
}

dies gibt mir die Liste der *.ZIP dateien aus

das geht auch!
Code: (dl )
1
2
3
4
5
6
7
8
9
@file2 = qw (PIXX_SRV_LF5.LOG
           PIXX_SRV_LF5.LOG.1
           Datei.log
          );
foreach $file2 (@file2){
          $fh  = new Archive::Zip::MemberRead($zip, $file2);
          $zeile = 0;
          print "$file2\n";
}


und dieser Teil geht bis auf folgendes auch
Code: (dl )
1
2
3
4
5
6
7
while (defined($line = $fh->getline())) { 
         chomp($line);
         ++$zeile;
        if ($line =~ /$String/) {
        print "Found in Line $zeile: $line\n in ZipFile $file File  file2\n";
}
$fh->close();


in dem letzten teil kann ich aber leider nicht $file $file2 aus den beiden ersten teilen mehr benutzen.
ich bekomme obwohl es mehrfach in verschiedenen dateien
den string "strict" gibt nur einmal angezeigt.

ich bin trotz perl buch lesen noch nicht weiter gekommen
renee
 2003-11-29 00:11
#73166 #73166
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann für nichts garantieren, aber probier mal folgendes:
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
use warnings; 
use strict;
use diagnostics;
use Archive::Zip;
use Archive::Zip::MemberRead;

$String = "strict";   #Such String

my @file2 = qw (PIXX_SRV_LF5.LOG
            PIXX_SRV_LF5.LOG.1
            Datei.log );#Verschieden Dateien im ZIP Archive
my @file = glob ("*.zip");
foreach my $file (@file){
 my $zip = new Archive::Zip($file);
 print "$file\n";
   foreach my $file2 (@file2){
      my $fh  = new Archive::Zip::MemberRead($zip, $file2);
      my $zeile = 0;
      while (defined($line = $fh->getline())) {
        chomp($line);
         ++$zeile;
         if ($line =~ /$String/) {
           print "Found in Line $zeile: $line\n in ZipFile $file File $file2\n";
           $fh->close();
          }
         }
         print "$file2\n";
       }
}#Liste der *.ZIP Dateien
\n\n

<!--EDIT|renee|1070057633-->
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/
Rambo
 2003-11-29 19:38
#73167 #73167
User since
2003-08-14
803 Artikel
BenutzerIn

user image
hi, ansich war der Code nicht verkehrt :-) nur muss man
wissen wo man das FH->close setzt :-)
hier falls es jemanden intersiert 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
use strict; 
use warnings;
use diagnostics;
use Archive::Zip;
use Archive::Zip::MemberRead;

#****************************
# Search String
#****************************
my $String = "strict";

#****************************
# Search over all ZIP Files
#****************************
my @Zip_File = glob ("*.zip");
for my $Zip_File (@Zip_File){

#****************************
#
#****************************
my $zip = new Archive::Zip($Zip_File);

#****************************
# Files to be read
#****************************
my @file2 = qw (Datei1.log PIXX_SRV_LF5.LOG);
for my $file2 (@file2){

#****************************
# Open Zip Archive for
# reading Files
#****************************
my $fh  = new Archive::Zip::MemberRead($zip, $file2);

#****************************
# Line number call for
# Search String
#****************************
my $zeile = 0;
while (defined(my $line = $fh->getline())) {
   chomp($line);
   ++$zeile;
   if ($line =~ /$String/) {
   print "Found in Line $zeile: $line\n in ZipFile $Zip_File File $file2\n\n";
   }
  }
 $fh->close();
}
}


danke für die Hilfe!!
<< >> 5 Einträge, 1 Seite



View all threads created 2003-11-28 21:15.