Hej! När du skriver ner det till databasen via din sqlsträng så säger du att det skall vara x tecken, då kan det i alla fall aldrig bli overflow. Jag förstår inte. Menar du att begränsa antal tecken vid skrivning av text? Tanken är att den del av texten (nyhet) som får plats ska visas på förstasidan och vara en länk till hela texten (som ska kunna vara hur lång som helst). > Allt skulle vart frid och fröjd om inte enterslagen vid uppladdnig av texten bytts ut Det har ingen betydelse (för det här problemet). Varför inte bar ta bort? För att den som skriver nyheten ska ha möjlighet att kunna stycke-indela sin text. Jo, men det är bara i beräkningen av stränglängden som Replace-funktionen skall användas. Okej, ska försöka förklara bättre. använd regexp och räkna hur många gånger det står <br>. sedan tar du left(str,850 - (70 * antal <br>)) ÄR inte riktigt som du tänkt dig. Men ska jobba på den när jag kommer hem. Gurra: En metod (som är löjligt långsam) är att du går igenom hela strängen, och räknar antalet tecken.hantering av stränglängd?!
Jag har ett storleksbegränsat område som ska fyllas med text från en databas. Vill inte använda mig av scroll-lister (annars är <code>style="overflow: auto;"</code> ett smidigt sätt), så jag kör följande knep:
<code>
If Len(text) > 850 Then
text = Left(text, 850) & ... Läs mer
End If
</code>
Allt skulle vart frid och fröjd om inte texten innehöll breaktaggar. Nu gör den det och räknaren ser breaktaggar som fyra tecken medans den i själva verket tar upp en hel rad.
Detta gör att texten blir alldeles för stor vid visning, och hela sidan blir förstörd. :)
Har försökt räkna antalet breaktaggar i texten och gångrat varje med 50 för att få ett ungefärligt värde:
<code>
text = Left(text, 850-(antal breaktaggar))
</code>
Men detta fungerar inte pga att alla breaktaggar i texten räknas, inte bara de som skrivs ut. Så är det en lång text med många breaktaggar så skrivs det knappt ut någon text alls.
Kan någon hjälpa mig? Jag är säkert inne på helt fel spår...
mvh MaxSv: hantering av stränglängd?!
Sv: hantering av stränglängd?!
Sv: hantering av stränglängd?!
> mot breaktaggar (för att användaren ska kunna stycke-indela).
Byt inte ut radbrytningarna vid uppladdning utan vid utskrift.Sv: hantering av stränglängd?!
Denna funktion:
<code>text = Left(text, 850)</code>
räknar <code><br></code>som fyra tecken oavsett om det byts ut vid utskrift.
mvh MaxSv: hantering av stränglängd?!
<code>
text = Replace(text, "<br>", "")
If Len(text) > 850 Then
text = Left(text, 850) & ... Läs mer
End If
</code>Sv: hantering av stränglängd?!
Ursäkta om jag uttrycker mig oklart, har läst igenom mitt inlägg och det är nog svårt att förstå hur jag menar... :)
mvh MaxSv: hantering av stränglängd?!
Sv: hantering av stränglängd?!
Sidan består av en huvudframe som inte är scrollbar. Här finns flera nyheter som hämtas från databaser. Om en nyhet är för lång pressas resten ner utom synhåll. Därför har jag försökt begränsa längden av visning till att få plats inom angiven td, för att sedan länka vidare till fulllängd.
<code>
<td width=90 height=200>
<%=text%>
bla bla blabla <br>(räknas som 4 när den egentligen tar upp ca 70 teckens utrymme)
blabla bla bla bla <br>
<br>
<br>
<br>
bla blabla
mer text som nu inte innehåller 850 tecken, MEN tar upp 850 teckens plats...
</code>
resultat: Td:n blir alldeles för hög
Blev det bara rörigare nu? :D
mvh MaxSv: hantering av stränglängd?!
Sv: hantering av stränglängd?!
<code>
Private Function LimitText(Value, MaxColumns, MaxRows, Append)
Dim Row
Dim Rows
Rows = Split(Value, "<BR>")
For Row = 0 To UBound(Rows)
If Len(Rows(Row)) > MaxColumns Then
Rows(Row) = Left(Rows(Row), MaxColumns) & Append
ReDim Preserve Rows(Row)
Exit For
ElseIf Row >= MaxRows Then
Rows(Row) = Rows(Row) & Append
ReDim Preserve Rows(Row)
Exit For
End If
Next
LimitText = Join(Rows, "<BR>")
End Function
Response.Write LimitText(text, 85, 3,"... Läs mer")
</code>
Allt skulle vart frid och fröjd om inte texten innehöll breaktaggar. Nu gör den det och räknaren ser breaktaggar som fyra tecken medans den i själva verket tar upp en hel rad.
Detta gör att texten blir alldeles för stor vid visning, och hela sidan blir förstörd. :)
Har försökt räkna antalet breaktaggar i texten och gångrat varje med 50 för att få ett ungefärligt värde:
<code>
text = text, 250, -(antal breaktaggar))
</code>
Men detta fungerar inte pga att alla breaktaggar i texten räknas, inte bara de som skrivs ut. Så är det en lång text med många breaktaggar så skrivs det knappt ut någon text alls.
Kan någon hjälpa mig? Jag är säkert inne på helt fel spår...
mvh Max
</code>Sv: hantering av stränglängd?!
Problemet med det är att HELA textens br räknas, inte den del som visas. Är texten då lång och innehåller många br, blir det inte rätt iallafall.
Är detta problem olösligt? Det har jag svårt att tro...
tack för engagemang
mvh MaxSv: hantering av stränglängd?!
typ
for i=1 to len(str)
if mid$(str, i, 4)="<br>" then
i=i+3
antaltecken=antaltecken+50
else
antaltecken=antaltecken+1
end if
next
En annan metod är att du gör en funktion "AntalTecken(str)", och sen gör en iterativ undersökning. typ:
function AntalTecken(str)
nystr=replace(str, "<br>", "")
antal_br=(str-nystr)/4
AntalTecken=antal_br*50+len(nystr)
end function
och sen kollar du med nånting i stil med
Max=850
antal=max
antalt=Antaltecken(left(str))
do while antalt=>max
antal=antal-50
antalt=Antaltecken(left(str))
loop
Och det går att optimera mycket hårdare.