Avatar billede bramsing Nybegynder
27. marts 2009 - 09:50 Der 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:
Avatar billede softspot Forsker
29. marts 2009 - 11:30 #1
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...).
Avatar billede bramsing Nybegynder
30. marts 2009 - 10:25 #2
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 ??
Avatar billede softspot Forsker
30. marts 2009 - 10:45 #3
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
Avatar billede bramsing Nybegynder
30. marts 2009 - 11:13 #4
Jeg prøver at kigge på det i aften :-)
Avatar billede bramsing Nybegynder
31. marts 2009 - 08:24 #5
Jeg kunne ikke få dit eks. til at virke...

Jeg får en fejl:
Microsoft VBScript runtime error '800a0009'
Subscript out of range: '[number: 0]'
/test/default.asp, line 50

  set objSvrXML2 = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
  objSvrXML2.open "GET", url, false
  objSvrXML2.send
  indhold = objSvrXML2.responseText

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

response.write("<textarea name=vData wrap=off cols=100 rows=20>"&data&"</textarea><br><br>")

Der kommer fint data ind da den første textarea bliver fyldt som den skal...
Avatar billede softspot Forsker
31. marts 2009 - 11:08 #6
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
Avatar billede bramsing Nybegynder
31. marts 2009 - 12:17 #7
Det var lige det der skulle til - Takker mange gange :-)
Lægger du et svar :-)
Avatar billede softspot Forsker
31. marts 2009 - 12:29 #8
Velbekomme :-)
Avatar billede softspot Forsker
31. marts 2009 - 14:52 #9
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester