05. september 2003 - 23:27Der er
30 kommentarer og 1 løsning
Åbne en bestemt fil
<% Response.Buffer = True
dim sti,fso,folder,files sti = server.MapPath(".") Set fso = createobject("scripting.filesystemobject") Set folder = fso.getfolder(sti) Set files = folder.files for each file in files if LCase(fso.GetExtensionName(file.name)) = "xml" and inStr(1,Lcase(file.name), "test_data_") > 0 then filnavn = file.name exit for end if next
Dim xml Set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = False xml.load (Server.MapPath(filnavn))
Dim title, heading, paragraph, testHTML Fornavn = xml.documentElement.childNodes(0).text Efternavn = xml.documentElement.childNodes(1).text Adresse = xml.documentElement.childNodes(2).text Postnr = xml.documentElement.childNodes(3).text By = xml.documentElement.childNodes(4).text
Set xml = Nothing %> Jeg skal åbne en bestemt xml-fil på serveren. Filen bliver automatisk genereret af et eksternt program.
Filen hedder test_data_xxxx.xml hvor x'erne er vilkårlige tal og bogstaver. Der findes også en test_data.xml, men det er den anden som skal åbnes
Jeg har prøvet med nedenstående script uden succes. Kan man gøre andet - f.eks sige at filen skal være over 9 tegn?
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
dim sti,fso,folder,files, file sti = server.MapPath(".") Set fso = createobject("scripting.filesystemobject") Set folder = fso.getfolder(sti) Set files = folder.files for each file in files
if LCase(fso.GetExtensionName(file.name)) = "xml" and (inStr(1,Lcase(file.name), "test_data_") > 0) and len(file.name) > 15 then
filnavn = file.name exit for end if next
Dim xml Set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = False xml.load (Server.MapPath(filnavn))
Dim fornavn, efternavn, adresse, postnr, by Fornavn = xml.documentElement.childNodes(0).text Efternavn = xml.documentElement.childNodes(1).text Adresse = xml.documentElement.childNodes(2).text Postnr = xml.documentElement.childNodes(3).text By = xml.documentElement.childNodes(4).text
Set xml = Nothing %> <html> <head> <title></title> </head> <body> test <h3 align="center"><%= fornavn %> <%= efternavn %></h3> <p align="center"><% = adresse %></p> <div align="center"><%= postnr %><%= by %></div> </body> </html>
Ok, det xml obejct kender jeg ikke, men en siger at documentElement mangler et obejdt jeg fandt et eks på nettet er det sådan noget du vil?? http://zhanshou.hypermart.net/XML/net.html
Det gør den :-) " test_data_639159938CFF47A49F0023446AA650E1.xml Microsoft VBScript runtime error '800a01a8' Object required: '[object]' /finn2/test.asp, line 28 "
Ja i første omgang :-) Jeg skal senere prøve om jeg kan lave noget forespørgsel. Det er derfor det var best hvis man kunne smide data ind i en database
Ok her eks, den åbner filen som en teskt fil og bruger regular expression til at finde data og putter dem i et array ogudsrkiver fra det. Det stiller dog et krav og der er at data i filen står sådan her, en linje per <field id="... linje.:
dim sti,fso,folder,files, file sti = server.MapPath(".") Set fso = createobject("scripting.filesystemobject") Set folder = fso.getfolder(sti) Set files = folder.files for each file in files
if LCase(fso.GetExtensionName(file.name)) = "xml" and (inStr(1,Lcase(file.name), "test_data_") > 0) and len(file.name) > 15 then filnavn = file.name exit for end if next
Set FSO = Server.CreateObject("Scripting.FileSystemObject") Set file = FSO.OpenTextFile(Server.MapPath(filnavn)) Set re = New RegExp re.Global = true re.IgnoreCase = true
redim personArr(0) personStr = "" do while not file.AtEndOfStream str = file.readline
if re.test(str) then outstr = re.Replace(str, "$2") personStr = personStr & "," & outstr else if personStr <> "" then personStr = Mid(personStr,2) personArr(ubound(personArr)) = personStr personStr = "" redim preserve personArr(ubound(personArr)+1) end if end if loop file.Close
for i = lbound(personArr) to ubound(personArr) str = personArr(i) if str <> "" then strArr = Split(str,",") fornavn = strArr(0) efternavn = strArr(1) adresse = strArr(2) postnr = strArr(3) by = strArr(4) %>
eller står det sådan her: <field id="174">Ole</field><field id="175">Knold</field><field id="176">Vejlevej 4</field><field id="177">8987</field><field id="178">Valby</field>
Ok, jeg var lige væk et 1 times tid, prøv med dette så, koden er lavet lidt om:
--koden-- <% Response.Buffer = True
dim sti,fso,folder,files, file sti = server.MapPath(".") Set fso = createobject("scripting.filesystemobject") Set folder = fso.getfolder(sti) Set files = folder.files for each file in files
if LCase(fso.GetExtensionName(file.name)) = "xml" and (inStr(1,Lcase(file.name), "test_data_") > 0) and len(file.name) > 15 then filnavn = file.name exit for end if next
Set FSO = Server.CreateObject("Scripting.FileSystemObject") Set file = FSO.OpenTextFile(Server.MapPath(filnavn))
Set re = New RegExp re.Global = true re.IgnoreCase = true
redim personArr(0) personStr = "" do while not file.AtEndOfStream filArr = split(file.readAll, "<field ") for i = lbound(filArr) to ubound(filArr) str = filArr(i) re.Pattern = "(id=""\d+"">)([a-zæøåA-Z0-9\s]+)(</field>)"
if re.test(str) then outstr = re.Replace(str, "$2") personStr = personStr & "," & outstr Response.Write personStr & "<br>"
if inStr(1,str, "</fields>") then personStr = Mid(personStr,2) personArr(ubound(personArr)) = personStr personStr = "" redim preserve personArr(ubound(personArr)+1) end if end if next loop file.Close
for i = lbound(personArr) to ubound(personArr) str = personArr(i) if str <> "" then strArr = Split(str,",") fornavn = strArr(0) efternavn = strArr(1) adresse = strArr(2) postnr = strArr(3) by = strArr(4) %>
Skal de ind i tilsvarne kolonner? Så det da hurtigt lige at tilføje eks. som vist nedenfor antager alle 5 kolonner er defineret som text kolonner i databasen, by står i [] fordi det er reserveret ord i SQL (ORDER BY).
Du kan udvide dette styk kode:
for i = lbound(personArr) to ubound(personArr) str = personArr(i) if str <> "" then strArr = Split(str,",") fornavn = strArr(0) efternavn = strArr(1) adresse = strArr(2) postnr = strArr(3) by = strArr(4) %>
dim sti,fso,folder,files, file sti = server.MapPath(".") Set fso = createobject("scripting.filesystemobject") Set folder = fso.getfolder(sti) Set files = folder.files for each file in files
if LCase(fso.GetExtensionName(file.name)) = "xml" and (inStr(1,Lcase(file.name), "test_data_") > 0) and len(file.name) > 15 then filnavn = file.name exit for end if next
Set FSO = Server.CreateObject("Scripting.FileSystemObject") Set file = FSO.OpenTextFile(Server.MapPath(filnavn))
Set re = New RegExp re.Global = true re.IgnoreCase = true
redim personArr(0) personStr = "" do while not file.AtEndOfStream filArr = split(file.readAll, "<field ") for i = lbound(filArr) to ubound(filArr) str = filArr(i) re.Pattern = "(id=""\d+"">)([a-zæøåA-Z0-9\s]+)(</field>)"
if re.test(str) then outstr = re.Replace(str, "$2") personStr = personStr & "," & outstr
if inStr(1,str, "</fields>") then personStr = Mid(personStr,2) personArr(ubound(personArr)) = personStr personStr = "" redim preserve personArr(ubound(personArr)+1) end if end if next loop file.Close
UPS - pinlig jeg ikke kunne se en lile fejl. Der er en anden lille fejl - By bliver til f.eks. "Valby<fields>" i databasen.
En anden ting er at Ø bliver til "ø", Å bliver til "å" og Æ bliver til "Æ". Kan man gøre noget ved det. Jeg har ikke mulighed for at validere i Quask programmet.
Ok, har lidt set en lille fejl i koden som finder de enkelte felter..
PRøv at udskifte dette:
do while not file.AtEndOfStream filArr = split(file.readAll, "<field ") for i = lbound(filArr) to ubound(filArr) str = filArr(i) re.Pattern = "(id=""\d+"">)([a-zæøåA-Z0-9\s]+)(</field>)"
if re.test(str) then outstr = re.Replace(str, "$2") personStr = personStr & "," & outstr
if inStr(1,str, "</fields>") then personStr = Mid(personStr,2) personArr(ubound(personArr)) = personStr personStr = "" redim preserve personArr(ubound(personArr)+1) end if end if next loop
Med dette:
do while not file.AtEndOfStream filArr = split(file.readAll, "<field ") for i = lbound(filArr) to ubound(filArr) str = filArr(i) re.Pattern = "(id=""\d+"">)([a-zæøåA-Z0-9\s]+)(</field>)"
if re.test(str) then outstr = re.Replace(str, "$2") index = inStr(1,outstr, "</fields>") if index > 0 then outstr = left(outstr,index-1) end if
personStr = personStr & "," & outstr if index > 0 then personStr = Mid(personStr,2) personArr(ubound(personArr)) = personStr personStr = "" redim preserve personArr(ubound(personArr)+1) end if end if next loop
den skulle gerne skrive det lige så mange gang i databsen som den skriver det på skærmen.
Synes godt om
Ny brugerNybegynder
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.