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

regexp + löschen



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
shaihulud
 2006-10-17 14:55
#70807 #70807
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
hi

bisher suche ich mir aus einem verzeichnis alle Dateien mit der Endung JPL und speichere diese in einem array ab.
Code: (dl )
1
2
3
4
5
6
7
8
my $suffix = '.JPL';
my $srcdir = $Zeilen[3]."/";
my @dateien = glob($srcdir."*$suffix");
for my $datei (@dateien) {
my $document;
&functions(\$document,$datei,\%hash,$srcdir);
push(@documentlist,$document);
}


Nun habe ich rausgefunden dass sich manchmal Dateien dazwischen schummeln die vorne an ihrem Dateinamen "---" stehen haben. Das heisst die meisten dateien sehen so aus:
"asdf.JPL" , aber manche sehen so aus "---asdf.JPL".
Ich möchte dass bei allen nur asdf.JPL ins array abgespeichert wird und die "---" rausgelöscht werden wenn sie denn da sind.
Hat jemand ne idee wie ich das machen kann?

Wäre sehr lieb wenn mir da jemand weiterhelfen könnte. danke :)
vayu
 2006-10-17 15:08
#70808 #70808
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
my @dateien = grep(!/-{3}/, glob($srcdir."*$suffix"));


so kriegst nur die dateien ohne ---

wenn du die auch haben willst, aber die --- weggeschnitten werden sollen, dann machs so:

Code: (dl )
1
2
my @dateien = glob($srcdir."*$suffix");
s/---// foreach(@dateien);
\n\n

<!--EDIT|vayu|1161083601-->
Linuxer
 2006-10-17 15:13
#70809 #70809
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Hi,

geht es Dir darum, die Dateien zu ignorieren, die mit '---' beginnen, oder möchtest Du den String '---' am Anfang des Dateinamens entfernt haben?

Für die erste Variante schrieb Dir vayu schon eine Lösung. Hier mal mein Vorschlag:

Code: (dl )
my @dateien = grep { ! index($_,'---') == 0 } glob(...):


Für die zweite Variante hier meine Lösung:

Wenn Du eh schon eine for-Schleife einsetzt, dann kannst Du da die Anpassung vornehmen:

Code: (dl )
1
2
3
4
5
6
7
8
for my $datei ( @dateien ) {
# *entweder* als regex
$datei =~ s/^---//;
# *ODER* ohne regex
$datei = substr($datei,3) if ( index($datei, '---') == 0 );

...
}


[edit] vayus Nachbearbeitung wurde mir nicht mehr angezeigt ;o)) [/edit]\n\n

<!--EDIT|Linuxer|1161083680-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
vayu
 2006-10-17 15:17
#70810 #70810
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ja mir kam auch erst später, dass er die evtl nicht ignorieren will, sondern nur den substr raushaben möcht :)
shaihulud
 2006-10-17 15:18
#70811 #70811
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
ich möchte die dateien weiterhin mitnehmen nur ohne die "---" im namen. das möchte ich praktisch wegschneiden.das hieße ich muesste die dateien umbennen in namen ohne "---" vorne dran.
shaihulud
 2006-10-17 15:20
#70812 #70812
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
mein Eintrag greift später auf die datei wieder zu um infos zu holen. das heisst sollte dann ohne "---" im verzeichnis stehen.
Das bescheurte ist nämlich das dazugehörende dokumente etc nicht mehr mit dem --- vorne dran heissen, sonst aber gleich im namen sind.. (völlig bescheuerte konstruktion..)


nach der übergabe :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my $document    = shift;
my $datei = shift;
my $hash2 = shift;
my $srcdir = shift;



#öffne Datei $datei (Form: *.JPL) und lese Zeile der Datei ein
open(DATEI, "<$datei") || die "Datei nicht gefunden";
my @Zeilen = <DATEI>;
close(DATEI);

....
\n\n

<!--EDIT|shaihulud|1161084390-->
renee
 2006-10-17 15:30
#70813 #70813
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum Umbenennen kannst Du rename (siehe perldoc -f rename) verwenden.

Code: (dl )
1
2
3
4
5
6
7
8
my @dateien = glob($srcdir."*$suffix");
for(@dateien){
if(index($_,"---") == 0){
(my $newname = $_) =~ s/^---//;
rename $_,$newname;
$_ = $newname;
}
}
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/
shaihulud
 2006-10-17 19:42
#70814 #70814
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $suffix = '.JPL';
my $srcdir = $Zeilen[3]."/";
my @dateien = glob($srcdir."*$suffix");

for(@dateien){
      if(index($_,"---") == 0){ # line 63
       (my $newname = $_) =~ s/^---//;
       rename $_,$newname;
       $_ = $newname;
   }
    my $document;
    &functions(\$document,$_,\%hash,$srcdir);
    push(@documentlist,$document);
}


Fehlermeldung:"Use of uninitialized value in string eq at line 63"

Ne ahnung wie des behebt werden kann?\n\n

<!--EDIT|shaihulud|1161099978-->
shaihulud
 2006-10-17 20:20
#70815 #70815
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $suffix = '.JPL';
my $srcdir = $Zeilen[3]."/";
my @dateien = glob($srcdir."*$suffix");

for my $datei(@dateien){
if(index($datei,"---") == length $srcdir ){ # line 63
(my $newname = $datei) =~ s/^---//;
rename ($datei,$newname);
$datei = $newname;
}
my $document;
&functions(\$document,$datei,\%hash,$srcdir);
push(@documentlist,$document);
}



die zeile hat den fehler: newname ist gleich datei. er benennt sie nicht um.
(my $newname = $datei) =~ s/^---//;
shaihulud
 2006-10-17 20:41
#70816 #70816
User since
2006-04-12
76 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $suffix = '.JPL';
my $srcdir = $Zeilen[3]."/";
my @dateien = glob($srcdir."*$suffix");

for my $datei(@dateien){
if(index($datei,"---") == length $srcdir ){ # line 63
my $tempsrc =quotemeta $srcdir;
(my $newname = $datei) =~ s/^($tempsrc)---/$tempsrc/;
print $newname;
rename ($datei,$newname);
$datei = $newname;
}
my $document;
&functions(\$document,$datei,\%hash,$srcdir);
push(@documentlist,$document);
}


er escaped mit quotemeta alle zeichen ... auch das :
ansonsten sind halt die Sonderzeichen nicht drin.
jemand ne ahnung wie man das lösen kann?

danke
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-10-17 14:55.