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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.