02. juni 2006 - 00:06Der er
17 kommentarer og 1 løsning
søge efter en streng i tekst fil
hejsa
jeg er igang med at lave et script der går igennem en tekstfil og tjekker for en dato streng i en tekst fil og hvis datoen er over en måned gammel skal den næste lije slettes og kører videre igennem tekstfilen for at tjekker om der er andre steder i filen hvor dato er ældre end en måned og igen slette næste linje.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Dette script åbner c:\datoer tjekker om måneden er mindre end den aktuelle måned. Bemær, den kun tjekker på måneden. Du kan evt. tjekke på antal dage, eller både måned og dag, hvis det skal være nøjagtigt 1 måned :)
Derefter laver det en ny fil der hedder c:\nyedatoer, og putter resultatet ind der.
Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForAppending = 8 Set objTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForReading) Do Until objTextFil.AtEndOfStream strNextLine = objTextFil.Readline strtekst = strtekst & strNextLine & VbCrLf If InStr(strnextline,"DATO= ")Then dato = replace(strnextline,"DATO= ","") wscript.Echo DateDiff("m",Date , dato) If DateDiff("m",Date , dato) < 0 Then strNextLine = objTextFil.Readline End If End If Loop Set destobjTextFil = FSO.OpenTextFile ("c:\nyedatoer.txt", ForAppending,1) destobjtextfil.WriteLine(strtekst) destobjTextFil.Close
Det du kan gøre er, at lade scriptet slette og oprette filen igen. Hvis du også gerne vil af med den næste line, sætter du bare en strNextLine = objTextFil.Readline ekstra ind.
Her er så scriptet :
Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForAppending = 8 Set objTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForReading) Do Until objTextFil.AtEndOfStream strNextLine = objTextFil.Readline strtekst = strtekst & strNextLine & VbCrLf If InStr(strnextline,"DATO= ")Then dato = replace(strnextline,"DATO= ","") wscript.Echo DateDiff("m",Date , dato) If DateDiff("m",Date , dato) < 0 Then strNextLine = objTextFil.Readline strNextLine = objTextFil.Readline
End If End If Loop objTextFil.Close fso.DeleteFile "c:\datoer.txt" Set destobjTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForAppending,1) destobjtextfil.WriteLine(strtekst) destobjTextFil.Close
hej Killer. okey tak for det :) der er lige en lille ting til så er den som det skal være, selve dato linjen skal også slettes.. men jeg har lige lidt svært ved at få den linje slettet.. det må denne her dato = replace(strnextline,"DATO= ","") der skal laves om er det ik?
Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForAppending = 8 Set objTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForReading) Do Until objTextFil.AtEndOfStream strNextLine = objTextFil.Readline strtekst = strtekst & strNextLine & VbCrLf
If InStr(strnextline,"DATO= ")Then dato = replace(strnextline,"DATO= ","") wscript.Echo DateDiff("m",Date , dato) If DateDiff("m",Date , dato) < 0 Then strNextLine = objTextFil.Readline strNextLine = objTextFil.Readline End If End If
jah det er det jeg mener. men det vil sige at man bliver nød til at gøre det over to gange at løbe filen igennem igen efter man har gjort det andet først`?
Her er der lige en, der er lidt pænere sat sammen :o)
Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForAppending = 8 Set objTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForReading) Do Until objTextFil.AtEndOfStream strNextLine = objTextFil.Readline If InStr(strnextline,"DATO= ")Then dato = replace(strnextline,"DATO= ","") If DateDiff("m",Date , dato) > 0 Or DateDiff("m",Date , dato) = 0 Then strtekst = strtekst & dato & VbCrLf strtekst = strtekst & objTextFil.Readline & VbCrLf End If End If Loop objTextFil.Close fso.DeleteFile "c:\datoer.txt" Set destobjTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForAppending,1) destobjtextfil.WriteLine(strtekst) destobjTextFil.Close
hey killerclown.. jeg har ikke lige været hjemme endnu. men jeg glæder mig til at prøve dit eksempel af. jeg er sku glad for at du kan fikse den.. foresten fedt det med inStr funktionen. det er noget lignende KIX script vidste ikke man kunne gøre det i vbs :) jeg vender tilbage så snart jeg har prøvet det :D
hey killerclown. jeg syns ikke rigtig det virker det der.. jeg kan se nu at du har gjort så den kommer i den samme fil. cool!. men jeg kan ikke rigtig få den til at slette det rigtige den skal slette.. altså : det er således Tekstfilen ser ud inden der bliver slettet:
jeg har fået til den til næsten at virke men helt godt er det ikke så bliver der stadig noget tilbage når jeg kører den f.eks dato feltet kan jeg ikke fjerne. hmm
værsgo :) lige et hurtig spørgsmål til hehe. i bunden af tekstfilen tilføjer den lige en linjeskift for meget. hvergang scriptet kører. det syns jeg er lidt underlligt. hvordn ka det være
Og med denne slipper du for ekstra linebreak i toppen også :))
Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 Const ForAppending = 8 Set objTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForReading) Do Until objTextFil.AtEndOfStream strNextLine = objTextFil.Readline If InStr(strnextline,"DATO= ")Then dato = replace(strnextline,"DATO= ","") If DateDiff("m",Date , dato) > 0 Or DateDiff("m",Date , dato) = 0 Then i = i+1 If i = 1 Then strtekst = strtekst & objTextFil.Readline & VbCrLf Else strtekst = strtekst & VbCrLf & objTextFil.Readline & VbCrLf End if strtekst = strtekst & objTextFil.Readline & VbCrLf strtekst = strtekst & objTextFil.Readline End If End If Loop objTextFil.Close fso.DeleteFile "c:\datoer.txt" Set destobjTextFil = FSO.OpenTextFile ("c:\datoer.txt", ForAppending,1) destobjtextfil.WriteLine(strtekst) destobjTextFil.Close
/Killer
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.