Avatar billede dank Nybegynder
27. august 2003 - 21:52 Der er 11 kommentarer

mere regular expression igen igen

$line har en lang streng

jeg har behov for

$name= Det der står mellem det første + og det første :
$dir= Det der står mellem :/ og :

En linie fra filen ser f.eks. sådan her ud:

+test.dk-:test.dk:89:89:/usr/local/vpopmail/domains/test.dk:-::

Nogen der kan guide mig lidt videre? Behøves ikke lave det hele for mig, bare et fingerpeg. Jeg har læst i perldoc perlre, men synes egentligt bare jeg blev mere forvirret end klog :)
Avatar billede erikjacobsen Ekspert
27. august 2003 - 21:56 #1
if ($line =~ m/^\+(.*?):.*?:\/(.*?):/) {
  $foerste=$1;
  $andet=$2;
}
#utestet
Avatar billede mfalck Praktikant
27. august 2003 - 21:58 #2
er det et konstant antal der er imellem : ?

så kunne man noget i stil med:

^+(.*):(.*):(.*):(.*):(.*):.*$

så er $1="test.dk-" og $5=/usr/local/vpopmail/domains/test.dk
Avatar billede dank Nybegynder
27. august 2003 - 22:06 #3
if ($line =~ m/^\+(.*?)-.*?:\/(.*?):/) {

rettede den en lille smule, men nu virker det!

Erik: Svar?

mfalck: Nej det er desværre ikke konstant.

Det er et lille script der skal tage samtlige brugere på en mailserver og konvertere til den nye mailserver med SQL o.s.v. Og jeg er desværre ikke så skrap til Perl. Det går lidt bedre med PHP, men det er jo en god lejlighed til at lære lidt perl :o)
Avatar billede dank Nybegynder
27. august 2003 - 22:06 #4
smart at det bare bliver smidt i $1 $2 iøvrigt! :)
Avatar billede erikjacobsen Ekspert
27. august 2003 - 22:08 #5
Hmm, hvorfor er antallet af ":"-er ikke konstant. Hvis det var ville dette nemlig også virke:

$line = "+test.dk-:test.dk:89:89:/usr/local/vpopmail/domains/test.dk:-::";

@a = split ":",$line;
$name=$a[0];
$dir=$a[4];

print "$name $dir\n";

...pånær et + i $name
Avatar billede dank Nybegynder
27. august 2003 - 22:21 #6
Jo... det er mig der vrøvler ukontroleret. Antallet er selvfølgeligt konstant. Sådan går det når man ser fodbold, svarer mail og forsøger at lære på samme tid :o/

Jeg forbeholder mig retten til at spørge om flere nybegynder spørgsmål de næste par dage :o)
Avatar billede erikjacobsen Ekspert
27. august 2003 - 22:24 #7
Men så du jo lige have sorteret lidt mere fra:

$line = "+test.dk-:test.dk:89:89:/usr/local/vpopmail/domains/test.dk:-::";

@a = split ':|\+|-',$line;
$name=$a[1];
$dir=$a[6];

print "$name $dir\n";
Avatar billede dank Nybegynder
27. august 2003 - 22:25 #8
Ja.. det virker også perfekt. :o)
Avatar billede dank Nybegynder
27. august 2003 - 22:26 #9
Gem krudtet til den svære der kommer om lidt :)
Avatar billede erikjacobsen Ekspert
27. august 2003 - 22:31 #10
Nu skal du ikke tro den er for svær, når jeg nu ikke svarer ;) Men det er
godnat-tid.
Avatar billede dank Nybegynder
27. august 2003 - 22:33 #11
jada.. intet problem.. Jeg så også gerne nogle andre trådte ind, så jeg ikke skal trække for meget på dig.

Vil du ikke nok tage imod point, så jeg kan få min rolige nattesøvn uden moralmararidt :o/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester