Avatar billede mskjoldp Novice
24. januar 2004 - 16:08 Der er 15 kommentarer og
1 løsning

tekst string længere end designet

Hej E

Jeg har læst mig frem til at man kan tælle antallet at tegn i et output, fint nok og den kode jeg bruger er:
<%If len(besked) > 100 Then%><%=(left(besked, 100) & "<br>")%><%Else%><%=besked%><%end if%>

Problemet for mig er at koden kun skal indsætte et <br> hvis et ord i træk er på ca 100 tegn. Ovenstående kode indsætter et <br> efter 100 tegn om der så er mellemrum mellem ordenen...

Dette spørgsmål er afstedkommet af:
http://www.eksperten.dk/spm/456013

/Skjold
Avatar billede mskjoldp Novice
24. januar 2004 - 16:12 #1
output nu:
dsjjdslkfjskdjflksdjflksdjfksdjfksjdlfkjsdlkfjsldkfjslkdfjsldkjflksdjflksdjflksdjfsdkjflskdjflksdjflksdjflksdjflksdjflksdjflksdjflksjdflksdjflksdjflkdsfjlsdkfsldkfjlsdkfjlsdkfj

ønskeligt output:
sdkjfksdjfksjdkfjsdlkjflksdjflkjsdlkfjsldkfjslkdjfsldkjfsd<br>fjdslkfjsdlkfjskdfjslkdfjlskdjfkdsjflskj<br>sfdsdfsdf

/Skjold
Avatar billede mskjoldp Novice
24. januar 2004 - 16:13 #2
Jeg kan se at Eksperten har samme problem.. den øverste tekst string forsætter ud gennem designet.

/Skjold
Avatar billede voirsous Nybegynder
24. januar 2004 - 16:33 #3
umildbart vil jeg sige du skal finde alle ord (delt af mellemrum) og så tjekke på hvert enkelt ord. Mit gæt er dog ved store tekster, er det en krævene process, så det er måske en god ide at gøre det når du smider det ind i databasen, og ikke når du trækker det ud.
Har desværre ikke kompetence indenfor ASP til at lave reel kode eksempel.
Avatar billede mskjoldp Novice
24. januar 2004 - 16:37 #4
hmm .. jeg ser din pointe i at tjekke inden det smides i db'en..

/Skjold
Avatar billede eagleeye Praktikant
24. januar 2004 - 17:51 #5
Måske det kan hjælpe dig. Det er en funktion som kan klippe i ord og man angiver max længden for et ord med max_antal_karakter:

<%
function delord(str, max_antal_karakter)
MAX_LEN = max_antal_karakter ' max længde per ord.. det retter du bare..
NYT_TEGN = " "  'Indsættes i langt ord. Evt kan <br> for linjeskift brugers
ordArr = Split(str, " ")
for i = lbound(ordArr) to ubound(ordArr)
tmp = ordArr(i)
  if len(ordArr(i)) >= MAX_LEN then
    for a = 0 to len(ordArr(i)) / MAX_LEN
      if len(tmp) >= MAX_LEN then
        strNy = strNy & NYT_TEGN & left(tmp, MAX_LEN) & vbCrLf
        tmp = mid(tmp, MAX_LEN + 1)
      end if
    next
  end if
strNy = strNy & " " & tmp
next
delord = strNy
end function
%>
Avatar billede mskjoldp Novice
24. januar 2004 - 22:27 #6
hmm der lovende ud eagleeye, jeg er ikke helt hjemme i at bruge funktioner endnu, så det kan godt være at der falder et par spg herom.

Jeg prøver koden...

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 17:08 #7
Hmm jeg må lige..

Dette er den kode der skriver nyheder ud:

bla bla forbindelse
<%    Do While Not rs.Eof
    titel = rs("titel")
    besked = rs("post")
    besked = Replace(besked, vbCr,"<br>") %>
bla bla design
<%=titel%>
bla bla design
<%=besked%>
bla bla design
<%    rs.Movenext   
    Loop
osv...


Skal jeg så:
bla bla forbindelse
<%    Do While Not rs.Eof
    titel = rs("titel")
    besked = rs("post")
    besked = Replace(besked, vbCr,"<br>")
function delord(besked, 30)
MAX_LEN = 30
NYT_TEGN = "<br>"
ordArr = Split(besked, " ")
for i = lbound(ordArr) to ubound(ordArr)
tmp = ordArr(i)
  if len(ordArr(i)) >= MAX_LEN then
    for a = 0 to len(ordArr(i)) / MAX_LEN
      if len(tmp) >= MAX_LEN then
        beskedNy = beskedNy & NYT_TEGN & left(tmp, MAX_LEN) & vbCrLf
        tmp = mid(tmp, MAX_LEN + 1)
      end if
    next
  end if
beskedNy = beskedNy & " " & tmp
next
delord = beskedNy
end function
%>
bla bla design
<%=titel%>
bla bla design
<%=delord%>
bla bla design
<%    rs.Movenext   
    Loop
osv...


Eller hvad...?

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 17:15 #8
Normalt ligge man function uden for selv koden evt. i bunden af ASP filen, og så skal man kalde functionen man kan ikke skriver det direkte på den måde :)

Prøv at ligge den oprindelige function efter </html> taget eller hvad der er helt i bunden.:

</html>
<% 'function her:
function delord(str, max_antal_karakter)
MAX_LEN = max_antal_karakter ' max længde per ord.. det retter du bare..
NYT_TEGN = " "  'Indsættes i langt ord. Evt kan <br> for linjeskift brugers
ordArr = Split(str, " ")
for i = lbound(ordArr) to ubound(ordArr)
tmp = ordArr(i)
  if len(ordArr(i)) >= MAX_LEN then
    for a = 0 to len(ordArr(i)) / MAX_LEN
      if len(tmp) >= MAX_LEN then
        strNy = strNy & NYT_TEGN & left(tmp, MAX_LEN) & vbCrLf
        tmp = mid(tmp, MAX_LEN + 1)
      end if
    next
  end if
strNy = strNy & " " & tmp
next
delord = strNy
end function
%>



Så brug dit oprindelige kode:

bla bla forbindelse
<%    Do While Not rs.Eof
    titel = rs("titel")
    besked = rs("post")
    besked = Replace(besked, vbCr,"<br>") %>
bla bla design
<%=titel%>
bla bla design
<%=besked%>
bla bla design
<%    rs.Movenext   
    Loop
osv...


og der hvor du replacer vbCrLf til <br> sætte du en ny linje ind:
    besked = rs("post")
    besked = Replace(besked, vbCr,"<br>") %>

Så det bliver sådan her sådan den kalder function som klipper lange ord:
    besked = rs("post")
    besked = delord(besked,30)
    besked = Replace(besked, vbCr,"<br>") %>
Avatar billede mskjoldp Novice
25. januar 2004 - 17:19 #9
Aha :)

Prøver...
Avatar billede mskjoldp Novice
25. januar 2004 - 17:27 #10
hahaha .. det virker til dels. Resultatet bliver at nu opdeles ordene der er længere end 75, ok, men lol, som recorden køre gennem loop'et bliver der hægtet forgående nyhed på den næste, osv...

Se på http://www.deltawings.dk/default.asp?mode=newz

Hvordan kommer jeg omkring den?

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 17:32 #11
Hvis jeg ' foran besked = delord... så virker der normalt
<%    Do While Not rs.Eof
    titel = rs("titel")
    besked = rs("post")
'    besked = delord(besked, 75)
    besked = Replace(besked, vbCr,"<br>") %>

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 17:33 #12
hmm Prøv lige at til føje et par linjer i funktionen:

function delord(str, max_antal_karakter)
MAX_LEN = max_antal_karakter ' max længde per ord.. det retter du bare..

Så de bliver:
function delord(str, max_antal_karakter)
dim MAX_LEN, NYT_TEGN, strNy
strNy = ""
MAX_LEN = max_antal_karakter ' max længde per ord.. det retter du bare..
Avatar billede eagleeye Praktikant
25. januar 2004 - 17:34 #13
hehe :) den opretter strNy som global variable og så gemmes den fra gang til gang
Så det skulle hjælpe med det sidste.
Avatar billede mskjoldp Novice
25. januar 2004 - 17:54 #14
hehe... Yeps mester nu er den der. :) Godt arbejde der, tilmed humoristisk til tider :)

Til dem der er intersseret i koden:
<%    function delord(str, max_antal_karakter)
    strNy = ""
    MAX_LEN = max_antal_karakter ' max længde per ord.. det retter du bare..
    NYT_TEGN = "<br>"  'Indsættes i langt ord. Evt kan <br> for linjeskift brugers
    ordArr = Split(str, " ")
    for i = lbound(ordArr) to ubound(ordArr)
    tmp = ordArr(i)
      if len(ordArr(i)) >= MAX_LEN then
        for a = 0 to len(ordArr(i)) / MAX_LEN
          if len(tmp) >= MAX_LEN then
            strNy = strNy & NYT_TEGN & left(tmp, MAX_LEN) & vbCrLf
            tmp = mid(tmp, MAX_LEN + 1)
          end if
        next
      end if
    strNy = strNy & " " & tmp
    next
    delord = strNy
    end function %>


Ved udskrift:
bla bla
    besked = rs("post")
    besked = delord(besked, 75)
    besked = Replace(besked, vbCr,"<br>")
bla bla

Eagleeye du ligger et svar hvis du lyster. Tak for hjælpen.

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 17:56 #15
Ok, jeps her et svar fra mig ;)
Avatar billede mskjoldp Novice
25. januar 2004 - 17:56 #16
Det var mig en fornøjelse
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