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

String Zeichenkontrolle



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Patrick
 2004-01-26 15:12
#79506 #79506
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte mehrere Strings auf eine gewisse Zeichenfolge kontrollieren:

Wert 1: 01_Test
Wert 2: 02_Tester
Wert 3: 10_irgendwas

Dies sind Namen von Dateien, welche keine Endung *.xy haben.

Da ich aber nur diese Werte und keine anderen (Dateien MIT Endung) haben möchte, brauche ich eine If Abfragung, die danach schaut!

Möglichkeit 1:
- Suche nach Zeichenfolgen à la "02_....."

Möglichkeit 2:
- Nehme nur Dateinamen ohne Endung (01_test)

Wie kann ich das jetzt bewerkstelligen?

Code: (dl )
1
2
3
4
5
6
7
8
# Schleife für eine Listbox
foreach $file (<*.*>)
{
if (*Suchanweisung*) # Ist eine Zahl am Anfang enthalten?
{ # oder ein Unterstrich an 3. Stelle?
# Führe aus
}
}


Wie wäre der Code um nur nach Dateien ohne Endung zu suchen?
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
Crian
 2004-01-26 15:15
#79507 #79507
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
m~\d{2}_[a-z]+$~

?

Das sucht nach allem, was mit 2 Ziffern beginnt, denen ein Unterstrich und dann mindestens ein bis beliebig viele kleine Buchstaben (außer Umlauten) folgen.

Hast Du mal versucht, nur <*> zu globben?

Heißt "ohne Endung" für Dich "der Dateiname enthält keinen Punkt"?

Dann ist vielleicht m~[^.]~ das richtige für Dich...

Edit: Quark, das matcht ja auf jeden Nichtpunkt. Also besser [tt]unless (m~\.~) oder halt [font=courier]if ($var !~ m~\.~) {...}[/tt]. Oder positiv: if (m~^[^.]*$~) {...}.[/font]

Wenn Du wirklich "Ist eine Zahl am Anfang enthalten? oder ein Unterstrich an 3. Stelle?" übersetzt haben willst, lautet die Antwort:

[tt]m~^\d|^.._~[/font]

oder halt

m~^\d~ or m~^.._~\n\n

<!--EDIT|Crian|1075126652-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Patrick
 2004-01-26 15:34
#79508 #79508
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Quote
Hast Du mal versucht, nur <*> zu globben?


da bekomme ich aber trotzdem alle Dateien.

wie müsste ich denn die Frage formilieren?
Code: (dl )
1
2
3
4
if ($string eq m~^\d.._~ )  # eq oder == ?
{
   # "normal" appending
}
\n\n

<!--EDIT|Patrick|1075124115-->
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
renee
 2004-01-26 15:46
#79509 #79509
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
if($string =~ /\d{2}_[a-zA-Z0-9]+$/){
print "Datei ohne Dateiendung mit folgendem Namensformat: zwei Zahlen Unterstrich mehrere Buchstaben";
}
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/
Crian
 2004-01-26 16:10
#79510 #79510
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
vielleicht schöner

if ($string =~ m~\d{2]_[^.]*$~) {...}


dann dürfen auch Leerzeichen, Umlaute und erlaubte Sonderzeichen drin vorkommen ... aber das hängt ganz davon ab, was Du haben willst.

... aber wenn "17_bild am strand" erlaubt sein soll oder so ...\n\n

<!--EDIT|Crian|1075126344-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-01-26 16:20
#79511 #79511
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
HiHo,

Code: (dl )
1
2
3
4
5
6
my @array = qw(01_Test 02_Tester 10_irgendwas);
foreach my $file (@array){
if($file =~ /^\d{1,2}_\w+|^\w+$/){
print "'$file' enthält eine Endung oder ist ungueltig!";
}
}
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Crian
 2004-01-26 16:23
#79512 #79512
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
öhm ... hast Du Dir den Thread durchgelesen?

Außerdem:

Code: (dl )
1
2
3
4
5
6
my @array = qw(01_Test 02_Tester 10_irgendwas 42_schoenes.Beispiel);
foreach my $file (@array){
if($file =~ /^\d{1,2}_\w+|^\w+$/){
print "'$file' enthält eine Endung oder ist ungueltig!\n";
}
}


Ausgabe:

Code: (dl )
1
2
3
4
'01_Test' enthält eine Endung oder ist ungueltig!
'02_Tester' enthält eine Endung oder ist ungueltig!
'10_irgendwas' enthält eine Endung oder ist ungueltig!
'42_schoenes.Beispiel' enthält eine Endung oder ist ungueltig!


Erstens ist der ausgegebene Kommentar irreführend und zweitens die RE fehlerhaft...

*grmp* ;)\n\n

<!--EDIT|Crian|1075127232-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2004-01-26 16:31
#79513 #79513
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Dann doch lieber so:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (qw(01_Test
02_Tester
10_irgendwas
42_schoenes.Beispiel
)
)
{
if (m~^(?:\d{2}_)?\w+$~) {
print "'$_' passt :)\n";
}
else {
print "'$_' enthält eine Endung oder ist ungueltig :-(\n";
}
}


Ausgabe

Code: (dl )
1
2
3
4
'01_Test' passt :)
'02_Tester' passt :)
'10_irgendwas' passt :)
'42_schoenes.Beispiel' enthält eine Endung oder ist ungueltig :-(
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-01-26 22:16
#79514 #79514
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hab den REGEXP vorher nicht getestet... ;)
Den Thread habe ich natürlich gelesen.
Er wollte, dass entweder eine von seinen vordefinierten Bezeichnungen oder eine Datei ohne Dateiendung zugelassen wird.
Oder habe ich da etwas überlesen? *g*
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Patrick
 2004-01-27 08:22
#79515 #79515
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Tja, ich habe es mal mit folgenden Code versucht

Code: (dl )
1
2
3
4
5
6
7
foreach $file (<*>)
{
if ($file =~ m~\d{2]_[^.]*$~)
{
print "$file \n";
}
}


Erfolg aber == 0!

foreach $file (<*>) -> den * habe ich deswegen benutzt, da ich ja die Dateien ohne Endung suche und bei *.* würden diese wegfallen!

Wieso klappt diese Abfrage nun nicht??
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-01-26 15:12.