Avatar billede Slettet bruger
23. marts 2007 - 11:08 Der er 11 kommentarer og
1 løsning

Fjerne line breaks

Hej - jeg vil gerne rydde lidt op i noget kode jeg har i en stor tekst-boks. Særligt vil jeg gerne fjerne tomme linier...

Problemet er, hvis jeg bruger:

REPLACE(r, vbCrLf, "")

så ender al teksten ud i én lang køre. Jeg ønsker kun at fjerne de tomme linier, således at eks.:

Linie 1

Linie 2


Linie 3

Linie 4


Linie 5


- bliver til:
Linie 1
Linie 2
Linie 3
Linie 4
Linie 5


Hvordan gør jeg det?!
Avatar billede softspot Forsker
23. marts 2007 - 11:32 #1
Du kan køre en rekursiv oprydning på din tekst indtil alle dobbelt-linieskift er fjernet. Dvs. du skal replace vbcrlf & vbcrlf indtil der ikke er flere af den slags i teksten...

do while instr(tekst, vbcrlf & vbcrlf) > 0
  tekst = replace(tekst, vbcrlf & vbcrlf, vbcrlf)
loop

utestet, men noget i den stil.
Avatar billede cpufan Juniormester
23. marts 2007 - 11:42 #2
function sletdobbelt(tekst)

tekst = replace(tekst,vbcrlf,"#¤")
tekst= replace(tekst,"#¤#¤","#¤")
  if instr(tekst,"#¤#¤")>0 then sletdobbelt(tekst)
tekst = replace(tekst,"#¤","<br>")
sletdobbelt = tekst

end function

nytekst = sletdobbelt(dintekst)


prøv den, -
Avatar billede softspot Forsker
23. marts 2007 - 12:02 #3
cpufan >> det vil da ikke fungere, da din rekursion ikke gemmer resultatet nogen steder og det dermed går tabt...
Avatar billede Slettet bruger
23. marts 2007 - 12:10 #4
> softspot,

Jeg kan se, du har fat i noget af det rigtige - hvordan skriver jeg det ind i min funktion (nedenfor - dog uden dit loop)?:

FUNCTION removetag (r)

  if r<>"" then r = REPLACE(r,vbcrlf & vbcrlf, vbcrlf)

  removetag = r
END FUNCTION
Avatar billede softspot Forsker
23. marts 2007 - 12:13 #5
FUNCTION removetag(tekst)

  do while instr(tekst, vbcrlf & vbcrlf) > 0
    tekst = replace(tekst, vbcrlf & vbcrlf, vbcrlf)
  loop

  removetag = tekst
END FUNCTION
Avatar billede Slettet bruger
23. marts 2007 - 12:18 #6
Works like a charm! Mange tak. Svar = point... :-)
Avatar billede cpufan Juniormester
23. marts 2007 - 12:24 #7
softspot det gør den da,

tekst= replace(tekst,"#¤#¤","#¤")
  if instr(tekst,"#¤#¤")>0 then sletdobbelt(tekst) 'kalder funktionen igen med den ændrede tekst
Avatar billede softspot Forsker
23. marts 2007 - 12:33 #8
Velbekomme :)

cpufan >> ja, du kalder funktionen igen, men returværdien af det kald gemmer du da ikke (såvidt jeg kan se)...
Avatar billede softspot Forsker
23. marts 2007 - 12:40 #9
Tak for point :)
Avatar billede cpufan Juniormester
23. marts 2007 - 12:44 #10
nej det er sgu da korrekt
den skal jo ha en returværdi

du er kvik ...

men den er heller ikke afprøvet...

din ser dog mere elegant ud ;-)

jeg var i tvivl om vbcrlf & vbcrlf ville virke
så jeg ploppede en ekstra replace ind.
Avatar billede cpufan Juniormester
23. marts 2007 - 12:45 #11
tester lige, min explorer går ned hver gang jeg laver et indlæg - lorte expl 7
Avatar billede softspot Forsker
23. marts 2007 - 12:49 #12
OK... jeg kom lige i tvivl om, hvorvidt du lænede dig op ad en byref parameter, men såvidt jeg husker, bliver parametre overført byval i VBS og det var på det grundlag jeg konkluderede.

Jeg har kigget lidt i Microsofts referencemanual til VBS, men jeg kan ikke finde noget om hvad der er default (byref eller byval) - og jeg har været for doven til at teste det :$
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