perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




11.02.2012 / 06:57

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragHilfe bei Splitting
Seitenanfang
Hallo Zusammen,

bin ein Perlanfänger und hatte schon gestern ein paar probleme die sich gelöst haben.
Danke nochmal für die Hilfe.

Jetzt hab ich ein neues Problem:

Das ist die aktuelle Ausgabe:

# //temp/dxxxxx/Aufgabe 1#5 - refreshing C:\Perforce\1666\temp\dxxxxx\Aufgabe 1

Die Ausgabe kommt vom Perforce aber egal.

ich will das so splitten das nur noch die Aufgabe 1 da steht.
Mein Ziel ist es vom Perforce alles lokal wo anders zu speichern.
Deswegen will ich alles aufsplitten und brauche dann nur die Aufgabe 1 die ich dann mit copy rüber transferieren kann.

Das komplette Ziel ist es den ganzen Verzeichnis z.B. dxxxx vom Pfad : //tmp/dxxxx zu kopieren und ein anderen Ordner zu speichern. Deswegen muss ich den string splitten.

Könntet ihr mit bitte wieder helfen.

Bedanke mich im vorraus nochmal für eure hilfe,.

BYE

Datum: 18.10.2005-13:28

Beitragre: Hilfe bei Splitting
Seitenanfang
Hi,

#!/usr/bin/perl -w

use strict;

# mit einer RegEx alles ab dem letzten Backslash
my $pos = tell(DATA); # nicht wichtig fr Dich, das ist nur, um spter an den Anfang von __DATA__ zurckzukehren
while (<DATA>) {
my ($string) = ($_ =~ m/^.*\\(.*)$/); # alles ab letzten Backslash
print $string, "\n";
}

# oder hinter "refreshing" splitten
seek DATA, $pos, 0; # zurck zum Anfang von __DATA__
while (<DATA>) {
chomp; # newline entfernen
my($null,$pfad) = split(/ refreshing /,$_); # am "refreshing" aufsplitten
my @pfadelemente = split(/\\/, $pfad); # an jedem Backslash splitten
print join(' - ', @pfadelemente), "\n"; # ausgeben
}

__DATA__
# //temp/dxxxxx/Aufgabe 1#5 - refreshing C:\Perforce\1666\temp\dxxxxx\Aufgabe 1
# //temp/dxxxxx/Aufgabe 2#5 - refreshing C:\Perforce\1666\temp\dxxxxx\Aufgabe 2
# //temp/dxxxxx/Aufgabe 3#5 - refreshing C:\Perforce\1666\temp\dxxxxx\Aufgabe 3
# //temp/dxxxxx/Aufgabe 4#5 - refreshing C:\Perforce\1666\temp\dxxxxx\Aufgabe 4


Gruss,
svenXY

Datum: 18.10.2005-16:53

Beitragre: Hilfe bei Splitting
Seitenanfang
Ich schau es mal an

Danke

Datum: 19.10.2005-15:49

Beitragre: Hilfe bei Splitting
Seitenanfang
also, das wolltest Du erklärt haben:


my ($string) = ($_ =~ m/^.*\\(.*)$/);

Du musst es ein wenig von hinten aufsplitten:

1) Die Regex schaut nach einem Muster von beliebigen Zeichen am Anfang eines Strings (^.*), gefolgt von einem Backslash (\\) - doppelter Backslash weil der Backslash selbst bei regulären Ausdrücken ein Sonderzeichen ist - er maskiert nämlich das folgende Zeichen, wiederum gefolgt von beliebigen Zeichen bis zum Ende des Strings (.*$) - also zum Beispiel nur den Name der Datei ohne den Pfad wie von Dir gewünscht.

Jetzt will ich aber eben nur den Namen der Datei, also klammere ich diesen Teil des RegEx. Damit landet dieser Teil in der reservierten Variable $1 (implizit), welchen ich dann ohne Umweg $string zuweise.

Das Ganze könnte man wesentlich umständlicher (aber vielleicht leichter verständlich) auch so schreiben:


$_ =~ m/^.*\\(.*)$/; # finde alles hinter dem letzten Backslash und schreibe es in $1
my $string = $1;

Hoffe, es wird jetzt klarer.
Gruss,
svenXY

Datum: 20.10.2005-15:48

-






-
-