Avatar billede karlsen Nybegynder
20. januar 2001 - 17:56 Der er 11 kommentarer og
2 løsninger

HASTER! lette point for eksperter!

Mit problem er at jeg har denne her variabel:
$message

der står en masse tekst i den, men jeg vil kun ændre noget af det.
Et eller andet sted i $message står der:
filename=\"blabla?\"

jeg vil gerne fjerne alle ? (spørgsmålstegn) fra teksten mellem de to anførselstegn efter filname=

sådan at der hvor der før stod filename=\"blabla?\" kommer der nu til at stå filename=\"blabla\"
Resten af $message skal selvfølgelig ikke ændres, det er kun det sted(er) hvor der står filename=\"blabla?????\" at spørgsmålstegn fjernes.


Er der nogen der kan ordne det? Be\' om!
Avatar billede kimg Nybegynder
20. januar 2001 - 18:01 #1
Brug et program der hedder SynEdit, du kan hente det på http://www.download.com

KIm
Avatar billede kimg Nybegynder
20. januar 2001 - 18:02 #2
Du kan også sende filen til mig
kimgraa@get2net.dk
Avatar billede karlsen Nybegynder
20. januar 2001 - 18:26 #3
Det jeg beder om er en kodestump der kan løse mit problem med at ændre i denne her variabel.
Avatar billede karlsen Nybegynder
20. januar 2001 - 19:30 #4
Nu er der sat flere point på spørgsmålet, der må da være nogen der kan ! ! !
Avatar billede erikjacobsen Ekspert
20. januar 2001 - 19:48 #5
Mon ikke dette virker

$message = \'her kommer der\\nnoget filename=\"blypp???\"\\ndadasd\\n\';
$message =~ s/(filename=\"[^?\"]*)(\\?*)(\")/\\1\\3/m;
print $message;
Avatar billede karlsen Nybegynder
20. januar 2001 - 20:14 #6
det skal også fungere når der står \"?b?ly??p\", og ikke kun når der er spørgsmålstegn i slutningen...
Avatar billede erikjacobsen Ekspert
20. januar 2001 - 20:42 #7
Okay - det gør det bare liiidt mere besværligt:

$message = \'her kommer der\\nnoget filename=\"bl?y?pp???\"\\ndad  filename=\"??l?y??p???\" asd\\n\';
while ($message =~ /(filename=\"([^\"]*)\")/m) {
  $x=quotemeta($1);
  $y=$2;
  $y=~s/\\?//g;
  $message =~ s/$x/fileXXXname=\"$y\"/m
}
$message=~s/fileXXXname/filename/gm;
print $message;
Avatar billede karlsen Nybegynder
20. januar 2001 - 20:51 #8
øøhm, dit script crasher...

jeg tror der er en fejl et eller andet sted.
Avatar billede ranko Nybegynder
20. januar 2001 - 21:12 #9
En anden mulighed er denne
$message = qq!her kommer der\\nnoget filename=\"bl?y?pp???\"\\ndad  filename=\"??l?y??p???\" asd\\n!;
$message =~ s/filename=\"(.*?)\"/\'filename=\"\'.rm($1).\'\"\'/ge;
sub rm {
  my ($f)=@_;
  $f =~ s/\\?//g;
  return $f;
}
print $message ;
Avatar billede karlsen Nybegynder
20. januar 2001 - 21:19 #10
fungerer perfekt, muligt man kunne få en kort forklaring på?
Avatar billede karlsen Nybegynder
20. januar 2001 - 21:34 #11
ranko var det muligt man kunne få en kort forklaring?
Avatar billede erikjacobsen Ekspert
20. januar 2001 - 22:17 #12
He he, ranko - jeg er da vist ved at blive for gammel ... Det er
jo meget smartere!
Avatar billede ranko Nybegynder
22. januar 2001 - 10:50 #13
s/// har parameteren e der gør at man kan skrive udtryk der så bruges i erstatningen

Det kan faktisk udnyttes lidt bedre når nu der ikke findes ? i \'filename\'

$message =~ s/(filename=\".*?\")/$_=$1; s!\\?!!g; $_/ge;
print $message ;

Udtrykket $_=$1; s!\\?!!g; $_ fjerner alle ? i $1 og returnerer resultatet
$_ skal bruges da $1 er read-only
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