Schrift
[thread]8768[/thread]

RegExp: Slash an Pfad anfängen, ...: ... falls nicht vorhanden



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Lightman
 2007-02-19 21:28
#74401 #74401
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte an einen Pfad einen Slash anhängen, falls keiner vorhanden ist. Also aus /pfad/zu/datei wird /pfad/zu/datei/.

Dafür habe ich mir folgende Abfrage mit RegExp gebastelt:
Code: (dl )
1
2
3
if ($path !~ /\/+$/) {
   $path .= "/";
}


Funktioniert soweit auch ohne Probleme. Da ich mich mit RegExp aber nicht besonders auskenne, wollte ich fragen, ob es eine elegantere Methode gibt? Was würdet ihr anders/besser machen?\n\n

<!--EDIT|Lightman|1171913521-->
GwenDragon
 2007-02-19 21:45
#74402 #74402
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Code: (dl )
$path .= '/' if $path !~ /\/$/;
pq
 2007-02-19 21:48
#74403 #74403
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
vielleicht ist es auch ein XY-problem und du wills CPAN:File::Spec
verwenden? dann musst du dich um sowas nicht kümmern.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Lightman
 2007-02-19 21:49
#74404 #74404
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Danke, das sieht schon um einiges Hübscher aus. ;)
Macht es eigentlich einen Unterschied, ob ich '/' oder "/" schreibe?

Edit:
@pq: Nein, es geht nur um ein kleines Modul, welches eine Datei einlesen soll. Dafür wird ein Pfad und ein Dateiname übergeben. Aber vielleicht überlege ich es mir noch anders und packe alles in eine Variable.\n\n

<!--EDIT|Lightman|1171914677-->
Relais
 2007-02-20 00:29
#74405 #74405
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Lightman,19.02.2007, 20:49]Macht es eigentlich einen Unterschied, ob ich '/' oder "/" schreibe?[/quote]
Ja, allerdings. Wenn Du korrekt tippst, dann mußt Du für
"/" rechts-Umstelltaste+links-2, dann links-Umstelltaste+rechts-7, dann rechts-Umstelltaste+links-2 tippen
wogegen für
'/' rechts-Umstelltaste festhaltend #+7+# getippt wird, das ist einfacher.

Theoretisch hat es Perl mit dem Ausdruck '/' einfacher, weil innerhalb von doppelten Anführungszeichen möglicherweise noch Variablen und anderer Schnickschnack interpoliert werden könnten. Tatsächlich macht es den Kohl nicht noch fetter.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
pq
 2007-02-20 00:40
#74406 #74406
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Lightman,19.02.2007, 20:49]@pq: Nein, es geht nur um ein kleines Modul, welches eine Datei einlesen soll. Dafür wird ein Pfad und ein Dateiname übergeben.[/quote]
ähm, genau dafür kannst du File::Spec benutzen.
Code: (dl )
1
2
3
4
5
$ perl -wle'use File::Spec;
print File::Spec->catfile("/foo/", "bar");
print File::Spec->catfile("/foo", "bar");'
/foo/bar
/foo/bar

funktioniert dann auch gleich auf allen betriebssystemen. und
das modul ist ein core-modul.\n\n

<!--EDIT|pq|1171924930-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
docsnyder
 2007-02-20 12:33
#74407 #74407
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@Lightman

... oder so:
Code: (dl )
$path =~ s!([^/])$!$1/!;

Gruss, Doc
Lightman
 2007-02-20 12:43
#74408 #74408
User since
2007-01-31
57 Artikel
BenutzerIn
[default_avatar]
Sowas habe ich gesucht, docsnyder. :) Kannst du mir den Ausdruck etwas näher erklären? Warum benutzt du den Modifikator "s" (AFAIK ist der für Newline-Erkennung mit ".")? Was bedeuten die Ausrufezeichen? Klammerst du "^/" zweimal, um $1 nutzen zu können?

@pq: Das Modul File::Spec ist auf dem Webserver nicht installiert und ich habe auch keinen Root-Zugriff. Außerdem macht es mehr Spass, solche Sachen selbst zu schreiben. (Auch wenn Damian Conway geschrieben hat, dass man gefälligst CPAN-Module für bekannte Probleme nutzen soll. ;) )
GwenDragon
 2007-02-20 12:59
#74409 #74409
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Das Regex bedeute: Ersetze alle Zeichen, die kein / am Zeilenende sind durch sich selbst und ein /
! sind die Begrenzer für das Muster
([^/]) bedeutet: kein Zeichen wie /
Linuxer
 2007-02-20 14:41
#74410 #74410
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Andere regexfreie Lösung:

Code: (dl )
1
2
3
if ( substr($path, -1, 1) ne '/' ) {
$path .= '/';
}
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!
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-02-19 21:28.