Ja, hvis du kan opstille et regelsæt for hvordan det skal fungere, så kan det nok lade sig gøre. Det eksempel du viser her er jo ret simpelt, men hvad sker der hvis f.eks. den usorterede fil indeholder elementer, som ikke eksisterer i referencen, og i særdeleshed hvis referencen ikke er så regelret som den du har vist... f.eks.:
M.a.o. indeholder den usorterede list ALTID kun et subsæt af det som referencen indeholder eller kan der være nye elementer (ifht. referencen) i den usorterede liste?
Hvis der ikke kan forekomme nye elementer i den usorterede liste, vil jeg egentlig bare gennemløbe referencen og spørge om elementet findes i den usorterede liste og hvis ikke så smide det væk. Dette gøres for hvert element. Resultatet er så den iflg. referencen sorterede liste...
For læses de usorterede og lægges i variablen u(.....) (der er plads til 10000 elementer. Dernæst læses fra reference-filen, 1 ad gangen, og holdes op imod alle de usorterede elementer, hvis der er sammenfald mellem det usorterede og referencen, skrives til den sorterede fil, samtidig markeres det via variablen ok(.....) er elementet er fundet i referencefilen.
Til sidst kontrolleres de usorterede, og hvis der er elementer som IKKE har være i reference-filen, skrives disse i fejl-filen.
set ref = fso.OpenTextFile("c:\reference.txt", ForReading) set usort = fso.OpenTextFile("c:\usorteret.txt", ForReading) set sort = fso.CreateTextFile("c:\sorteret.txt", True) set fejl = fso.CreateTextFile("c:\fejllog.txt", True) fejl.writeLine"Indeholder emner som ikke kunne sorteres"
do if usort.AtEndOfStream = True then exit do else tl = tl + 1 u(tl) = usort.readLine ok(tl) = 0 end if loop usort.close do if ref.AtEndOfStream = True then exit do else emne = ref.readLine for x = 1 to tl if emne = u(x) then sort.writeLine emne ok(x) = 1 end if next end if loop
for x = 1 to tl if ok(x) = 0 then fejl.writeLine u(x) end if next
sort.close ref.close msgbox"Programmet er afsluttet"
for refIdx = 0 to ubound(arrRef) newIdx = 0 do while newIdx <= ubound(arrSort) if lcase(arrRef(refIdx)) = arrSort(newIdx) then exit do end if if newIdx = ubound(arrSort) then arrRef(refIdx) = "" end if newIdx = newIdx + 1 loop next
' kondenser array, dvs. fjern tomme pladser ptr = 0 for i = 0 to ubound(arrRef) if arrRef(i) <> "" and arrRef(ptr) = "" then arrRef(ptr) = arrRef(i) arrRef(i) = "" ptr = ptr + 1 end if if arrRef(i) <> "" and arrRef(ptr) <> "" then ptr = ptr + 1 end if next
redim preserve arrRef(maxRef)
set strmRef = fso.OpenTextFile("sorted.txt",2,true) strmRef.Write(Join(arrRef, vbCrLf)) strmRef.Close set fso = nothing
tja... nsnielsen spurgte om sortering og endte med at lære om arrays, i min it-afdeling kalder vi den situation "at gå på landarkivet i Viborg".... en intern vits :-)
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.