webForumDet fria alternativet

Function som anger startposition och längd

13 svar · 541 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Hej,

Jag behöver en funktion där man anger en variabel, en position och en längd enligt:

function f(s, nStartPos, nLenght)

end function

Funktionen skall användas till att skapa en textfilsrad med fasta positioner

om jag anger:

f("foo", 1, 5) & f("bar", 6, 4)

Skall det genereras en post enligt:

Test.bar.

där . är mellansteg

Någon vänlig själ, som kan hjälpa till?

:)

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#2

Uhm, Mid()?

devotionMedlem sedan jan. 20013 582 inlägg
#3

@nders skrev:

Uhm, Mid()?

Hmm...

www.w3schools.com skrev:

Mid(string,start[,length])

Sorry... :r

Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#4

@nders skrev:

Uhm, Mid()?

Nä, det där blev ju inte rätt!

Jag vill ju skapa en funktion, som tar ett antal variabler(tex från ett recordset) och bygger ihop dessa till en lång sträng med fasta positioner för de ingående variablerna och fylla ut mellanrummen mellan dem med mellansteg

Exempel:

KOR  878678                                                                                          000000001                                                                1111

Därför skall nog funktionen heta GetFixedposition(s, sPosition) typ

Mvh
henrik

voigtann1Medlem sedan juni 20019 519 inlägg
#5

Kör en Split() om du skall kunna hämta ut "KOR" och "878678".

devotionMedlem sedan jan. 20013 582 inlägg
#6

voigtann1 skrev:

Kör en Split() om du skall kunna hämta ut "KOR" och "878678".

Jag vill inte hämta ut, jag vill skapa. :)

Mvh
henrik

voigtann1Medlem sedan juni 20019 519 inlägg
#7

En Funktion retunera data, så då ber jag om ursäkt att jag missförstod dig. Och förstå inte alls vad du är ute efter måste jag säga ;)

devotionMedlem sedan jan. 20013 582 inlägg
#8

Haha!

Det år många som inte förstår, du är inte ensam... :)

Jag försöker en gång till. :)

jag vill skapa en textsträng som skall skrivas till en textfil på en rad.

textsträngen skall ha ett antal "värden" på fasta positioner eftersom det läsande programmet hämtar från de positionerna.

Strängen skall se ut enligt:

Foo bar    wee

dvs Foo börjar på pos 1, bar börjar på pos 5, wee börjar på pos 12

Mellan alla värden skall dt fyllas ut med mellansteg.

:)

Mvh
henrik

voigtann1Medlem sedan juni 20019 519 inlägg
#9

för varje "loop" så får du se hur lång texten var, och köra en Space(x) på hur många tecken som behövs läggas in för att den skall "komma" på plats.

devotionMedlem sedan jan. 20013 582 inlägg
#10

Testade med:

	function f(s, nlength)
		f = left(s & string(20, " "), nlength)
	end function

Den fungerar ju nästan...

Den sätter ju en längd, dock så utgår den ju från föregående 'värde' hela tiden.

<% =f("KOH", 5) & f("A", 6) & f("B", 10) %>

Jag vill ju sätta en startposition istället

voigtann1Medlem sedan juni 20019 519 inlägg
#11
<%
Function AddSpace(str, nLength)
	AddSpace = str & Space(nLength-Len(str))
End Function

Response.Write AddSpace("hej",10)
Response.Write AddSpace("på",10)
Response.Write AddSpace("1234567890",10)
%>
devotionMedlem sedan jan. 20013 582 inlägg
#12

voigtann1 skrev:

<%
Function AddSpace(str, nLength)
	AddSpace = str & Space(nLength-Len(str))
End Function

Response.Write AddSpace("hej",10)
Response.Write AddSpace("på",10)
Response.Write AddSpace("1234567890",10)
%>

Gör den inte samma sak? :)

Jag vill ju ha en funktion som sätter positionen och fyller ut med mellansteg.

Function SetPosition(str, nPosition)
    dim s
   'fiffig kod

   SetPosition = s
end function

Mvh
henrik

voigtann1Medlem sedan juni 20019 519 inlägg
#13

Det är ju bara att loopar ut ditt objekt och köra funktionen i den funktionen som loopar ut. men automatiskt känns ju omöjligt att göra för dig just nu, eftersom du har 5, 6 och 10 i ditt exempel, då behöver man en array eller liknande för att veta hur många mellanslag den skall lägga in efter varje hopp i loopen den gör.

devotionMedlem sedan jan. 20013 582 inlägg
#14

Jag löste det så här:

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

och

<%
dim sHeader
sHeader=Space(205)
call SetSubString(sHeader, "KOH", 1, 5)
call SetSubString(sHeader, "A", 6, 6)
call SetSubString(sHeader, "<Task.CustomerNr>", 12, 10)
Response.Write sHeader
%>

Mvh
Henrik

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)