Schrift
[thread]10942[/thread]

scriptproblem



<< >> 5 Einträge, 1 Seite
FoCMB
 2007-12-03 11:53
#103392 #103392
User since
2007-12-03
2 Artikel
BenutzerIn
[default_avatar]
hi,
ich habe folgendes perl-script:

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
use strict;
#zu suchender String
#print "Was suchen?\n";
#my $string = <STDIN>;
#print "$string\n";
#print "Ab welcher Zeile schreiben?\n";
#my $lineNumber = <STDIN>;
my $lineNumber= 1;
# Verzeichnis öffnen und Anzahl *.txt zählen
print "test\n";
opendir(DIR,"Daten/alt/");
my @eintraege = readdir(DIR);
closedir(DIR);
my $anzahl = @eintraege;
# alle *.txt der Reihe nach öffnen...
my $n = 0;
for ($n = 2 ; $n < $anzahl + 1 ; $n++)
{
 my $filename = $eintraege[$n];
 my $count = 0;
print "$filename\n";
 open(DATEI2,">Daten/neu/$filename");
 open (DATEI,"<Daten/alt/$filename");
  while (<DATEI>)
 {
  next if ($_ =~ /XXXXXXXX/i);
  $count++;
  if ($count >$lineNumber)
    {
     print DATEI2 $_;
#     print "Schreibe: $_\n";
    }
 }
 close DATEI;
 close DATEI2;
}


es soll nach einer zeichenkette suchen und die zeile, die diese zeichenkette enthält löschen. die zeichenkette ist heir XXXXXXXX. wenn ich das direkt im script eingebe, funktioniert es. wenn ich es aber oben über doe $string variable mache, und diese unten bei "nextif ($_ =~/...../i) eintrage, dann funktioniert es nicht mehr. dann schreibt mir das script eine leere datei. vielleicht kann mir ja hier jemand helfen.
danke
renee
 2007-12-03 12:25
#103393 #103393
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst aus dem my $string = <STDIN>; ein chomp( my $string = <STDIN> ); machen...
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/
renee
 2007-12-03 12:31
#103394 #103394
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar Anmerkungen:

my @eintraege = readdir(DIR);
Hier holst Du nicht nur Dateien, sondern auch alle Verzeichnisse (inklusive der Einträge '.' (aktuelles Verzeichnis) und '..' (übergeordnetes Verzeichnis)).

Wenn Du alle .txt-Dateien haben willst, solltest Du es so machen:

my @eintraege = grep{ -f "/Daten/alt" . $_ and /\.txt$/ }readdir(DIR); mehr zu dem "-f" findest Du unter Perldoc:-f -X.

Du solltest eine Variable für den Verzeichnispfad verwenden. Das macht das Skript wartbarer...

Aus
Code: (dl )
1
2
3
4
5
my $n = 0;
for ($n = 2 ; $n < $anzahl + 1 ; $n++)
{
my $filename = $eintraege[$n];
#...


kannst Du das hier machen:
Code: (dl )
1
2
3
for my $filename ( @eintraege )
{
#...
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/
Struppi
 2007-12-03 13:39
#103395 #103395
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Und die aktuelle Zeilennummer der Datei die du einliest steht in $.
Du kannst dir also $count sparen.
if ($. >$lineNumber)...
betterworld
 2007-12-03 14:36
#103396 #103396
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Du solltest bei open und opendir den Rueckgabewert ueberpruefen. perldoc -f open
<< >> 5 Einträge, 1 Seite



View all threads created 2007-12-03 11:53.