webForumDet fria alternativet

Korta av textsträng

ASP

11 svar · 324 visningar · startad av Kim

Medlem sedan jan. 20007 697 inlägg
Frågan#1

Vi säger att jag har en textsträng, En massa text som inte har något egentligt innehåll, i en variabel, textString.
Nu vill jag korta av denna sträng till t.ex. 20 tecken och därefter lägga till tre punkter.
Resultatet ska alltså bli En massa text som in...

Någon som kan hjälpa mig med detta? :)

------------------
-mucho-

Medlem sedan dec. 200012 464 inlägg
#2
textString = mid(textString,1,20) & "..."

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20007 697 inlägg
#3

Tack Larsa! Snabb som alltid! :D

------------------
-mucho-

Medlem sedan jan. 200217 inlägg
#4

.. hej där, exakt var lägger man in textString = mid(textString,1,20) & "..." och varför .. "är ny på detta" =)

Jag har gjort nedan, och behöver den funktionen med, då det är en massa text annars ..

<%
If Request.Form("sokord") <> "" Then
	Response.Write "Din sökning på <b>" & Request.Form("sokord") & "</b> gav följande träffar.<br><br>" & vbCrLf

	SQL = "Select * from Documents Where Content Like '%" & Request.Form("sokord") & "%' "
	SET RS = Con.Execute(SQL)
	While Not RS.EOF
		Response.Write "<b>Sida - </b>" & RS("title") & "<br><br>" & RS("Content") & "<br>" & vbCrLf
	RS.MoveNext
	Wend
	RS.Close
	Set RS = Nothing
End If
%>

Mvh:

GbgKalle

[Redigerat av GbgKalle den 04 jan 2002]

Medlem sedan dec. 19992 085 inlägg
#5

Jag skrev en funktion för att lösa sånna här problem.

Man kan välja avslutningstecken så man behöver inte ha "..." och så lägger den inte till t.ex. "..." om strängen är t.ex. 23 tecken eftersom de då ändå blir lika långa :)

Den tar även bort avslutande mellanslag om det finns något sådan, tyvärr tar den bara bort ett så om man har flera mellanslag i slutet så fungerar det inte. Hittade inget smart sätt att göra det på :(

Här är funktionen samt lite exempelkod.

<%
   Function StringCut(strText,strEndString,intCutLength)
      if LEN(strText)>intCutLength+LEN(strEndString) then
         if MID(strText,intCutLength,1)=" " then
	        strText=Left(strtext,intCutLength-1)
         end if
         strText=Left(strText,intCutLength) & strEndString
      end if
      StringCut=strText
   End Function

   strOver20="En sträng som innehåller mkt mer än 20 tecken"
   str20="En 20 tecken sträng!"
   strOver20Space="En sträng som har 1 mellanslag exakt på teacken 20!"
%>
<html>
   <head>
      <title>
         20 tecken + "..."
      </title>
   </head>
   <body>
      <%
         Response.Write StringCut(strOver20,"...",20) & "<br>"
         Response.Write StringCut(str20,"...",20) & "<br>"
         Response.Write StringCut(strOver20Space,"...",20) & "<br>"
      %>
   </body>
</html>

------------------
//M@rtin || Peachy.nu\\

ni taLar Bra laTiN

[Redigerat av M@rtin den 04 jan 2002]

Medlem sedan jan. 200217 inlägg
#6

Hej M@rtin, det verkar ju vettigt, problemet är att jag är alldeles ny på detta så om du kunde visa mig vägen till en lösning baserat på den kod jag postade tidigare så vore jag jätte tacksam, skriv gärna lite kommentarer brevid varje ändring så jag får in det i skallen vad det innebär med .. är lite trög ibland .. hehe .. =)

Mvh:

GbgKalle

Medlem sedan mars 20014 214 inlägg
#7

Är det något fel på left eftersom ingen använder det...

" & left(rs("fält"),30) & " ...

------------------
MVH

Medlem sedan dec. 19992 085 inlägg
#8

Visst.

Förstår inte riktigt vad du vill göra. Om det är rubriken eller innehållet du vill korta ned. Nu skriver jag koden för att korta ned båda.

<%
[b]
Function StringCut(strText,strEndString,intCutLength)    'Här börjar funktionen
   if LEN(strText)>intCutLength+LEN(strEndString) then   'Här kontrolleras det om längden på strängen öht är för lång
      if MID(strText,intCutLength,1)=" " then            'Här kontrolleras det om sista teckenet är ett mellanslag
         strText=Left(strtext,intCutLength-1)            'Om så är fallet så klipps strängen ett tecken tidigare
      end if  
      strText=Left(strText,intCutLength) & strEndString  'Här läggs avslutningen på
   end if
   StringCut=strText                                     'Här returnerar funktionen resultatet
End Function
[/b]

'Sedan kommer din kod som jag antar att du vet vad den gör men jag kommenterar lite ändå
If Request.Form("sokord") <> "" Then  'Här kollas det om man sökt på något
Response.Write "Din sökning på <b>" & Request.Form("sokord") & "</b> gav följande träffar.<br><br>" & vbCrLf  'Lite text bara
SQL = "Select * from Documents Where Content Like '%" & Request.Form("sokord") & "%' " 'SQL strängen sätts till att söka i Documents efter strängar som inehåller sökorden i Content
SET RS = Con.Execute(SQL) 'SQL strängen körs
While Not RS.EOF 'Loopa reslutatet
Response.Write "<b>Sida - </b>" & [b]StringCut([/b]RS("title")[b],"...",20)[/b] & "<br><br>" & [b]StringCut([/b]RS("Content")[b],"...",40)[/b] & "<br>" & vbCrLf 'Här skrivs resultatet ut
RS.MoveNext 
Wend
RS.Close
Set RS = Nothing
End If
%>

Det nya är markerat med fet text. Nu klipps rubriken (title) vid 20 tecken och innehållet (content) vid 40.

------------------
//M@rtin || Peachy.nu\\

ni taLar Bra laTiN

Medlem sedan feb. 20012 412 inlägg
#9

Den tar även bort avslutande mellanslag om det finns något sådan, tyvärr tar den bara bort ett så om man har flera mellanslag i slutet så fungerar det inte. Hittade inget smart sätt att göra det på

if MID(strText,intCutLength,1)=" " then 'Här kontrolleras det om sista teckenet är ett mellanslag
strText=Left(strtext,intCutLength-1) 'Om så är fallet så klipps strängen ett tecken tidigare
end if

Hej, ett förslag. För att ta bort onödiga blankslag kan du använda funktionen trim()

Ltrim() --> tar bort blankslag till vänster
Rtrim() --> tar bort till höger
trim() --> tar bort både före och efter.

mvh Jörgen :)

------------------
.: Det är jag som ger svaren och det är Ni som ställer frågorna :.

[Redigerat av jorgen den 04 jan 2002]

Medlem sedan dec. 19992 085 inlägg
#10

Aha. Det var ju bra att veta. Tack! Då ska jag skriva om funktionen lite :)

------------------
//M@rtin || Peachy.nu\\

ni taLar Bra laTiN

Medlem sedan dec. 19992 085 inlägg
#11

Det gjorde ju funktionen bra mycket snyggare oxå :)

<%
   Function StringCut(strText,strEndString,intCutLength)
      if LEN(strText)>intCutLength+LEN(strEndString) then
         strText=RTrim(Left(strText,intCutLength)) & strEndString
      end if
      StringCut=strText
   End Function

   strOver20="En sträng som innehåller mkt mer än 20 tecken"
   str20="En 20 tecken sträng!"
   strOver20Space="En sträng som har 1 mellanslag exakt på teacken 20!"
%>
<html>
   <head>
      <title>
         20 tecken + "..."
      </title>
   </head>
   <body>
      <%
         Response.Write StringCut(strOver20,"...",20) & "<br>"
         Response.Write StringCut(str20,"...",20) & "<br>"
         Response.Write StringCut(strOver20Space,"...",20) & "<br>"
      %>
   </body>
</html>

------------------
//M@rtin || Peachy.nu\\

ni taLar Bra laTiN

Medlem sedan jan. 200217 inlägg
#12

.. tack så himla mkt M@rtin och alla andra .. nu blev det ju kanon .. å tack för förklaringarna i koden, såna får man aldrig för mkt av som "newbie" .. hehe ..

Mvh:

GbgKalle

256 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)