webForumDet fria alternativet

Dela textsträng vid mellanslag

ASP

13 svar · 403 visningar · startad av Koggen

Medlem sedan juni 2002169 inlägg
Frågan#1

Jag använder följande kod för att dela en textsträng om den överstiger 900 tecken:

if len(textstrang) > 900 then
str1 = left(textstrang, 900)
str2 = mid(textstrang, 901)
else
str1 = textstrang
str2 = " "
end if

Problemet är bara att nu kan strängen klippas av mitt i ett ord, och det vill jag helst inte. Vet någon om man kan fixa så att strängen delas vid föregående eller nästa mellanslag??

Tack

Medlem sedan juli 20021 363 inlägg
Medlem sedan jan. 20032 285 inlägg
#3

Det där #L# skrev blir ju inte riktigt samma sak väl?

str = "blabla bla abl aso af"

For i = 1 To 900
  If i = 900 Then
    If Mid(str,i,1) = " " Then
      strNy = Left(str,i)
    Else
      ii = 901
      Do Until blnMellan
        If Mid(str,ii,1) = " " Then
          strNy = Left(str,ii)
          blnMellan = True
        End If
        ii = ii + 1
      Loop
    End If
  End If
Next

Otestad kod, funkar säkerligen inte, men man kan ju testa.

Medlem sedan dec. 20003 887 inlägg
#4

red. Tog mig friheten att ändra i annans kod ;)

str = "blabla bla abl aso af"

If Len$(str) > 899 Then
  i = 900
  If Mid$(str,i,1) = " " Then
    strNy = Left$(str,i)
  Else
    bMellan = false

    Do Until bMellan
      If Mid$(str, i, 1) = " " Then
        strNy = Left$(str, i)
        bMellan = True
      End If

      i = i - 1
    Loop
  End If
End If
Medlem sedan juli 20021 363 inlägg
#5

Det där #L# skrev blir ju inte riktigt samma sak väl?

uhm? .. var väl precis det han var ute efter?

Medlem sedan jan. 20032 285 inlägg
#6

Engine^ skrev:

Trevlig lösning, men bör du inte använda ii = ii -1? Annars blir det ju för långt...

Han skrev ju "eller vid nästa mellanslag". ;)

#L# skrev:

uhm? .. var väl precis det han var ute efter?

Han ville väl inte ha 900 ord, han ville väl ha 900 bokstäver?

Medlem sedan dec. 20003 887 inlägg
#7

Sebbe skrev:

Han skrev ju "eller vid nästa mellanslag". ;)

Koggen skrev:

Problemet är bara att nu kan strängen klippas av mitt i ett ord, och det vill jag helst inte. Vet någon om man kan fixa så att strängen delas vid föregående eller nästa mellanslag??

;)

f.ö. så ändrade jag hela mitt inlägg, men du var för snabb att svara :)

Medlem sedan jan. 20032 285 inlägg
#8

Engine^: Bara en undran över din kod. Varför skriver du ett $-tecken efter alla dina strängfunktioner? Som t.ex. Len$(str), Mid$(str,i,1), m.fl?

Medlem sedan dec. 20003 887 inlägg
#9

Jag kommer faktiskt inte ihåg, men jag har för mig att det var snabbare än utan $. Jag vet att jag har läst om det någonstans, men jag hittar inte vart just nu. (Postar en länk här om jag hittar åt det igen)

Medlem sedan juni 2002169 inlägg
#10

Jag hade faktiskt sett det där med att splitta till array vid mellanslag, men det funkar inte för mig eftersom det jag skall skriva ut är en vetenskaplig text som kan innehålla alla möljiga tecken, och hur många mellanslag som helst.

Engines kod fungerade (sedan jag plockat bort $-tecknen), men en dum följdfråga..

Hur får jag nu ut resten av texten i en annan variabel där texten börjar från samma ställe som texten i den första variabeln slutar.. hoppas ni fattade det, det var knappt jag gjorde det själv ;)

Tack för hjälpen allihop

Medlem sedan dec. 20003 887 inlägg
#11

Koggen skrev:

Engines kod fungerade (sedan jag plockat bort $-tecknen), men en dum följdfråga..

Ok. $ är visst Visual Basic och innebär att en sträng returneras istället för en Variant. Alltså är det snabbare med Mid$, men det finns inte i VBScript. My mistake.

[blue]'Resten av texten[/blue]
strResten = Mid(str, i)
Medlem sedan juni 2002169 inlägg
#12

Tack än en gång, jag lär mig lite mer för var gång jag frågar här :)

Medlem sedan maj 200010 687 inlägg
#13

En enkel funktion utan en massa loopar och grejer.

Function CutString(sStr, lMaxLength)
	If InStr(lMaxLength, sStr, " ") Then
		CutString = Left(sStr, InStr(lMaxLength, sStr, " "))
	Else
		CutString = Left(sStr, lMaxLength)
	End If
End Function
Medlem sedan dec. 20003 887 inlägg
#14

InStr är ju en loop... ;)

Praktisk funktion om man vill ha med det sista ordet i strängen. Tyvärr fungerar den inte om det sista ordet har en bokstav någonstans på plats 900, eftersom då returnerar InStr 0, men sånt får man väl iofs ha överseende med.

Function CutString(sStr, iMaxLength)
  iFirst = InStrRev(sStr, " ", iMaxLength)
  iLast = InStr(iMaxLength, sStr, " ")

  If iLast <= iMaxLength And iLast > 0 Then
    CutString = Left(sStr, iLast)
  ElseIf iFirst < iMaxLength And iFirst > 0 Then
    CutString = Left(sStr, iFirst)
  Else
    CutString = Left(sStr, iMaxLength)
  End If
End Function
255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
115 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)