27. marts 2009 - 09:50Der er
8 kommentarer og 1 løsning
kolon delimited text
Jeg henter noget kolon delimited data fra en anden server og det virker...
For at spare at skulle lægge det ind i en database for at trække det ud igen vil jeg høre om der ikke er en smart måde at behandle / søge data ud på "on the fly"
Jeg har søgt efter delimited text og sår'n.. men jeg kan ikke rigtig finde noget brugbart...
nogle der har et link eller eks. ??
Data ser sår'n ca sådan ud ?? RK1 Her er noget data: RK1 noget andet data: RK1 noget tredje data: RK1 noget fjerde data: RK1 noget femte data: RK2 Her er noget data: RK2 noget andet data: RK2 noget tredje data: RK2 noget fjerde data: RK2 noget femte data: RK3 Her er noget data: RK3 noget andet data: RK3 noget tredje data: RK3 noget fjerde data: RK3 noget femte data: RK4 Her er noget data: RK4 noget andet data: RK4 noget tredje data: RK4 noget fjerde data: RK4 noget femte data: RK5 Her er noget data: RK5 noget andet data: RK5 noget tredje data: RK5 noget fjerde data: RK5 noget femte data:
Er data formateret således hver linie indeholder én række, eller er det bare én lang linie med 5 værdier pr. række?
Hvis det er opdelt på linier, kan du starte med at splitte dit indhold ved linieskifte og for hver linie så splitte indholdet ved kolon. Split-funktionen i VBS returnerer et array af strenge hvori du så kan søge...
Hvis data ligger i én lang streng, skal du nok benytte en anden metode, men det afhænger af hvor stor datamængde du forventer. En Split kan godt bruges, så skal du bare selv håndtere rækkeindekseringen (dvs. sørge for at skifte række for hvert 5. element, hvilket nu heller ikke burde være et problem...).
Data kommer ind på række niveau Men der ca 60 kolloner (kolon) pr. række, hvor det ca. er en 1/4 af kollonerne jeg skal trække data ud fra... Vil det stadig være en god løsning at splitte den op på den måde eller er der noget smartere ??
ja, det er fint nok at splitte dem ved linieskiftet i første omgang og så pr. kolon i forbindelse med iterationen over alle rækkerne. Så det kunne blive noget i stil med dette:
arrLines = split(data, vbCrLf) for each ln in arrLines arrCols = split(ln, ":") ' aflæs de kolonner du skal bruge, f.eks. arrCols(0) for første kolonne ' arrCols(1) for anden kolonne osv. next
output = "" arr = split(indhold, vbCrLf) inTheZone = false for each ln in arr if left(trim(ln),1) <> ";" then if trim(ln) = "!CLIENTS:" then inTheZone = true elseif trim(ln) = "!SERVERS:" then inTheZone = false elseif inTheZone then output = output & ln & vbCrLf end if end if next
Data = "" response.write("<textarea name=vsData wrap=off cols=100 rows=20>"&output&"</textarea><br><br>")
VData = output ' request.form("vsdata") arrLines = split(VData, vbCrLf) for each ln in arrLines arrCols = split(ln, ":") ' aflæs de kolonner du skal bruge, f.eks. arrCols(0) for første kolonne ' arrCols(1) for anden kolonne osv. data = data & arrCols(0) & vbCrLf next
Nu ved jeg ikke lige hvilken linie der er 50, men jeg antager det er fordi der er en tom linie i det resultat du får hentet og at indekseringen arrCols(0) måske derfor bliver ugyldig.
Du kan evt. rette den sidste løkke til:
VData = output ' request.form("vsdata") arrLines = split(VData, vbCrLf) for each ln in arrLines arrCols = split(ln, ":") ' aflæs de kolonner du skal bruge, f.eks. arrCols(0) for første kolonne ' arrCols(1) for anden kolonne osv. if ubound(arrCols) > -1 then data = data & arrCols(0) & vbCrLf end if next
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.