Avatar billede denz Nybegynder
25. oktober 2005 - 10:20 Der er 6 kommentarer og
1 løsning

Linjeskift uden at knække et ord

Min kode:
tekst = rs("tekst")
tekst = Replace(tekst, vbCrLf, "<br>")
'sikrer tvungen linieskift i textarea (word wrap)
for i = 1 to len(tekst) step 40
if (len(tekst) - i) < 40 then
  strNyStreng = strNyStreng & right(tekst, (len(tekst) - i))
else
  strNyStreng = strNyStreng & mid(tekst, i, 40) & "-<BR> "
end if
next

spørgsmålet lyder så på hvordan jeg for den til at lave linje skift efter et ord er færdig og ikke midt inde i et ord hvor den så bare laver bindestreg. kan man det ?? har nemlig ikke fundet nogen som har gjordt det..

Med venlig hilsen
Dennis Søberg Vinther
http://www.denz-design.dk
Avatar billede softspot Forsker
25. oktober 2005 - 10:31 #1
Jeg kunne forstille mig noget i stil med dette:

tekst = rs("tekst")
tekst = Replace(tekst, vbCrLf, "<br>")
'sikrer tvungen linieskift i textarea (word wrap)
i = 1
do while i < len(tekst)
  if (len(tekst) - i) < 40 then
    strNyStreng = strNyStreng & right(tekst, (len(tekst) - i))
  else
    iSpPos = instrrev(tekst, " ", i+40)
    if iSpPos < i then
      strNyStreng = strNyStreng & mid(tekst, i, 40) & "-<BR> "
    else
      strNyStreng = strNyStreng & mid(tekst, i, iSpPos-i) & "<BR> "
    end if
  end if
  i = i + 40
next
Avatar billede softspot Forsker
25. oktober 2005 - 10:33 #2
...og så skal i jo da kun forøges med det man rent faktisk klipper:

tekst = rs("tekst")
tekst = Replace(tekst, vbCrLf, "<br>")
'sikrer tvungen linieskift i textarea (word wrap)
i = 1
do while i < len(tekst)
  if (len(tekst) - i) < 40 then
    strNyStreng = strNyStreng & right(tekst, (len(tekst) - i))
    i = len(tekst)
  else
    iSpPos = instrrev(tekst, " ", i+40)
    if iSpPos < i then
      strNyStreng = strNyStreng & mid(tekst, i, 40) & "-<BR> "
      i = i + 40
    else
      strNyStreng = strNyStreng & mid(tekst, i, iSpPos-i) & "<BR> "
      i = iSpPos + 1
    end if
  end if
next
Avatar billede Slettet bruger
25. oktober 2005 - 10:33 #3
Et forslag kunne være at du når du har valgt den ønskede position (hver 40. bogstav) laver en løkke som bevæger sig frem eller tilbage i tekststringen indtil den møder et mellelrum og så laver du linjeskiftet på den position. Du skal der huske at opdatere tæller-variablen (i i dette tilfælde) til den position hvor du faktisk laver mellemrummet.

Du skal nok overveje at ændre til noget andet end et for-loop da det er big time no no at ændre tæller-variablen i koden. Derfor brug noget while istedet.
Avatar billede kabbak Professor
25. oktober 2005 - 10:36 #4
For I = 1 To Len(Tekst)
    If Len(Tekst) > 40 Then
        For T = 40 To 1 Step -1
        If Mid(Tekst, T, 1) = " " Then
          strNyStreng = strNyStreng & Left(Tekst, T) & "-<BR> "
          Tekst = Right(Tekst, Len(Tekst) - T)
          Exit For
        End If
      Next
      Else
      strNyStreng = strNyStreng & Tekst & "-<BR> "
      Exit For
      Exit For
      End If
Next
Avatar billede denz Nybegynder
25. oktober 2005 - 10:49 #5
Jeg har bare gjordt det at jeg lavede en tabel og bare skrev tekst = Replace(tekst, vbCrLf, "<br>")

det har jeg aldrig tænkt over at det bare vil virke sådan.. vel bare en der har bilt mig ind en gang at man skulle gøre det så besværlig.. hmm men ellers tak for svarene softspot du for point
Avatar billede softspot Forsker
25. oktober 2005 - 10:52 #6
OK (selvom jeg ikke helt forstod om det var brugbart eller ej)... :)
Avatar billede softspot Forsker
07. november 2005 - 12:17 #7
Tak for point :)
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