webForumDet fria alternativet

Kombinera två funktioner

ASP

2 svar · 326 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej,

Jag har två funktioner, enligt

function GetFixedLengthString(sLength, sText)
	dim sFirstChar, index
	dim a, n, k, r, str, re
	
	sFirstChar = 2
	
	n = array()
	k = 0
	r = 0
	index = 0
	
	set re = new regexp
	re.global = true
    re.ignorecase = true
	re.pattern = "(?:<br>)+"
	sText = re.replace(sText, " ")
	set re = nothing
	
	a = split(sText)
	
	while index <= ubound(a)
		if sFirstChar + r + len(a(index)) > sLength then
			str = vbcrlf 
			r = 0
			sFirstChar = 2
		end if
		
		r = r + 1
		sFirstChar = sFirstChar + len(a(index))
		redim preserve n(k)
		n(k) = str & a(index)
		k = k + 1
		index = index + 1
		str = ""
	wend
	
	GetFixedLengthString = join(n)
	
end function

den plockar in en sträng, och kortar ner raderna till nLength och lägger ett radbrytningstecken...

Fungerar finfint:

dim s

s="Hej, detta är en text som nog kommer vara mer än 60 tecken lång. Undrar hur det fungerar i praktiken?"

Response.write GetFixedLengthString(60, s)

Ger:

Hej, detta är en text som nog kommer vara mer än 60 tecken
lång. Undrar hur det fungerar i praktiken?

Jag har även en annan funktion som bygger upp en textsträng med fasta positioner enligt:

sub SetSubString(ByRef sFull, sSubString, nPos, nLen)
        ' Make sure that sFull is at least nPos+nLen chars long
        if Len(sFull)<nPos+nLen then sFull=sFull & Space(nPos+nLen-Len(sFull))

        ' Make sure that sSubString is at least nLen chars long (pad right)
        if Len(sSubString)<nLen then sSubString=sSubString & Space(nLen-Len(sSubString))

        sFull=Left(sFull, nPos-1) & Left(sSubString, nLen) & Mid(sFull, nPos+nLen) 
end sub

Används så här:

<%

dim sOrderTextRows

sHeader=Space(83)
call SetSubString(sOrderTextRows, "KORT", 1, 5)
call SetSubString(sOrderTextRows, sOrderText, 6, 60)
call SetSubString(sOrderTextRows, "1", 70, 1)
call SetSubString(sOrderTextRows, "1", 71, 1)
call SetSubString(sOrderTextRows, "1", 72, 1)

Response.Write sOrderTextRows

%>

Nu vill jag kombinera dessa två.

Dvs radbryta den inkommande strängen och skapa ett format baserat på fasta positioner enligt:

KORT Hej, detta är en text som nog kommer vara mer än 60            111 
KORT tecken lång. Undrar hur det fungerar i praktiken?              111

Mvh
Henrik

Medlem sedan juni 20019 519 inlägg
#2

Splitar det vid radbrytningen, loopar igenom arrayn och ta length per rad, joinar ihop den med en radbrytning igen.

Medlem sedan jan. 20013 582 inlägg
#3

Så här fick det bli:

function GetActionText(nLength, sText)
	dim sFirstChar, index
	dim a, n, k, r, str, re, i,s
	
	sFirstChar = 2
	
	n = array()
	k = 0
	r = 0
	index = 0
	
	set re = new regexp
	re.global = true
    re.ignorecase = true
	re.pattern = "(?:<br>)+"
	sText = re.replace(sText, " ")
	set re = nothing
	
	a = split(sText)
	
	while index <= ubound(a)
		if sFirstChar + r + len(a(index)) > nLength then
			str = vbcrlf 
			r = 0
			sFirstChar = 2
		end if
		
		r = r + 1
		sFirstChar = sFirstChar + len(a(index))
		redim preserve n(k)
		n(k) = str & a(index)
		k = k + 1
		index = index + 1
		str = ""
	wend
	
	GetActionText = join(n)
	
	a = split(GetActionText, VbCrLf)
    
    for i = lbound(a) to ubound(a)
        s = a(i)
        s = "KORT " & s
        while len(s) < 69
            s = s & " "
        wend
        s = s & "111"
        a(i) = s
    next

    GetActionText = join(a, VbCrLf)
	
end function
259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)