Archiv verlassen und diese Seite im Standarddesign anzeigen : Löschen von Zeilen aus Textdatei
WolleXPC
19.06.2008, 15:04
Hallo zusammen,
ich habe mit Hilfe einigen Posts hier aus dem Forum folgendes Skript an meine Bedürfnisse angepasst:
Set objRegEx = CreateObject("VBScript.RegExp")
strFilename = "test.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "0.00 0.00"
strFileContent = objRegExp.Replace(strFileContent, "")
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
Das Skript durchsucht die Textdatei test.txt nach der Zeichenfolge
"0.00 0.00", wenn die Zeichenfolge gefunden wird, werden sie gelöscht.
Ich möchte jedoch, dass wenn die Zeichenfolge gefunden wird, die komplette Zeile gelöscht wird und nicht nur ein Teil da von.
Wäre super wenn mir einer sagen könnte die das funktioniert.
Vielen Dank
Gruß Wolle
Firefall
19.06.2008, 15:21
Dann musst du nur das Muster entsprechend anpassen, nämlich so:
objRegExp.Pattern = "\x0D\x0A.*?0.00 0.00.*?\x0D\x0A"
Um solche Dinge zu finden, die zwischen zwei Zeilenumbrüchen (enspricht \x0D\x0A) stehen. Dabei werden allerdings beide Zeielnumbrüche ersetzt, d.h. du musst anstatt "" vbCrLf zum ersetzen wählen, dann wird wieder einer eingefügt. Wenn du LEERZEILEN möchtest, da wo das Zeug stand, dann ersetzt du einfach mit vbCrLf & vbCrLf.
Mit dem Script bekomme ich einen Laufzeitfehler...mhh.
Vielleicht kannst Du mir firefall weiterhelfen. Habe fast die gleiche Problematik.
Habe ein Textdatei Kasse.txt in der von Excel Buchungssätze exprtiert werden. Leider sind darin auch solche mit dem Wert 0. So kann die Datei aber nicht ohen Fehlermeldungen in Datev importiert werden. Wie könnte das Script aussehen, dass alle Zeilen mit 0,00 in der Zeile herauslöscht. Der Inhalt der Kasse.txt sieht z.B. so aus:
ANFANG DATEI
Umsatz Bar;30.10.08;127,57;1601;4401
Ausgaben;30.10.08;0,00;1371;1601
Abschöpfung;30.10.08;0,00;1461;1601
davon auf Scheck;30.10.08;0,00;1461;1601
Scheck Soll;30.10.08;0,00;1461;1370
Scheck;30.10.08;0,00;1461;4401
EC-Cash;30.10.08;300,33;1461;4401
Kreditkarte;30.10.08;0,00;1461;4401
Lastschrift;30.10.08;92,90;1461;4401
Gutschein;30.10.08;0,00;76000;4401
fehlt;30.10.08;0,00;1601;76000
ENDE DATEI
Die Datei sollte nach der "Behandlung dann so aussehen und nur gefüllte Werte enthalten:
ANFANG DATEI
Umsatz Bar;30.10.08;127,57;1601;4401
EC-Cash;30.10.08;300,33;1461;4401
Lastschrift;30.10.08;92,90;1461;4401
ENDE DATEI
Herzlichen Dank für Hilfe
Craxx;)
Firefall
03.11.2008, 23:56
Set objRegEx = CreateObject("VBScript.RegExp")
strFilename = "test.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = ""\x0D\x0A.*?0,00.*?\x0D\x0A"
strFileContent = objRegExp.Replace(strFileContent, vbCrLf)
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
WOW, dat geht ja flott:))))) DANKE !!!
Allerdings bekomme ich wieder ne Fehlermeldung. Möglicherweise stelle ich mich aber auch zu blöd an. Hab den Fehler mal als JPG angehängt.
Ich habe den code von Dir in eine craxx.vbs Datei eingefügt und gestartet.
Herzlichen Dank
Craxx;)
Firefall
04.11.2008, 09:23
WOW, dat geht ja flott:))))) DANKE !!!
Allerdings bekomme ich wieder ne Fehlermeldung. Möglicherweise stelle ich mich aber auch zu blöd an. Hab den Fehler mal als JPG angehängt.
Ich habe den code von Dir in eine craxx.vbs Datei eingefügt und gestartet.
Herzlichen Dank
Craxx;)
Doppeltes Anführungszeichen "" entfernen, da brauchts nur eins.
Hy Firefall,
habs jetzt so gemacht:
strFilename = "Kasse.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
Set objRegExp = New RegExp
objRegExp.Pattern = "\x0D\x0A.*?0,00.*?\x0D\x0A"
objRegExp.Global = True
objRegExp.IgnoreCase = True
strFileContent = objRegExp.Replace(strFileContent, vbCrLf)
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
Jetzt kommt kein Fehler mehr:))
Allerdings muss ich das Script mehrmals aufrufen bis alle Zeilen mit 0,00 rausgelöscht sind. Woran kann das liegen? Wie kann ich das ändern.
Herzlichen Dank für Deine Hilfe
Craxx;)
Firefall
04.11.2008, 10:39
Hy Firefall,
habs jetzt so gemacht:
strFilename = "Kasse.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
Set objRegExp = New RegExp
objRegExp.Pattern = "\x0D\x0A.*?0,00.*?\x0D\x0A"
objRegExp.Global = True
objRegExp.IgnoreCase = True
strFileContent = objRegExp.Replace(strFileContent, vbCrLf)
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
Jetzt kommt kein Fehler mehr:))
Allerdings muss ich das Script mehrmals aufrufen bis alle Zeilen mit 0,00 rausgelöscht sind. Woran kann das liegen? Wie kann ich das ändern.
Herzlichen Dank für Deine Hilfe
Craxx;)
strFilename = "Kasse.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
Set objRegExp = New RegExp
objRegExp.Pattern = "\x0D\x0A.*?0,00.*?(?=\x0D\x0A)"
objRegExp.Global = True
objRegExp.IgnoreCase = True
strFileContent = objRegExp.Replace(strFileContent, vbCrLf)
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
-ungeprüft
Hy Firefall,
Danke:))) mußte in dieser Zeile folgendes ändern, damit die Zeile rausgelöscht wird, sonst ist die Zeile nur leer:
strFileContent = objRegExp.Replace(strFileContent, "")
Jetzt habe ich noch das Problem, dass das Script leider auch solche Zeilen löscht, da dort 0,00 enthalten ist:
Bar;03.11.08;20,00;1602;76000
Wie kann ich das verhindern? Das Script soll eigentlich die Zeile immer dann löschen, wenn der Wert 0 (0,00) ist und immer dann stehen lassen, wenn der Wert ungleich 0 ist, also bei 1400,00 z.B.?
Hoffe das läßt sich machen?
Freue mich auf Deine Hilfe:)))
Craxx;)
Firefall
04.11.2008, 21:55
Dann klemmst du bei dem Ausdruck halt noch ein ; vor und hinter das 0,00. So:
strFilename = "Kasse.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strFilename)
intFileSize = objFile.Size
Set objFile = objFile.OpenAsTextStream()
strFileContent = objFile.Read(intFileSize)
objFile.Close
Set objRegExp = New RegExp
objRegExp.Pattern = "\x0D\x0A.*?;0,00;.*?(?=\x0D\x0A)"
objRegExp.Global = True
objRegExp.IgnoreCase = True
strFileContent = objRegExp.Replace(strFileContent, "")
Set objFile = objFSO.OpenTextFile(strFilename, 2)
objFile.Write strFileContent
objFile.Close
YEAH, You make my day!!!!!
Super HERZLICHEN DANK :))))
Craxx;)
Firefall
04.11.2008, 22:53
YEAH, You make my day!!!!!
Super HERZLICHEN DANK :))))
Craxx;)
You're welcome :cool:
WolleXPC
28.04.2009, 13:31
Hallo zusammen,
hätte noch mal eine Frage zu meinem Code
Do Until q.AtEndOfStream
Dim zeile
zeile = Replace(q.readLine, ",", "")
If mid$(zeile, 67, 4) <> "0,00" And mid(zeile, 87, 4) <> "0,00" Then
Z.writeline (zeile)
End If
Loop
Und zwar werden beim ausführen des Codes, die Zeilen einer Textdatei gelöscht, welche an Stelle 67 und 87 die Stelle 0,00 haben.
Nun ist mir aucgefallen, dass auch die Zeilen gelöscht werden, welche die Zahl 100,00 an dieser Stelle haben. Wie kann ich das Problem umgehen?
Vielen Dank
Gruß Wolle
Firefall
28.04.2009, 13:50
Statt mit "0,00" zu vergleichen z.B. mit ";0,00" (Mid natürlich entsprechend anpassen auf 5 Zeichen) oder sowas in der Art... Keine Ahnung, wie deine Eingabedaten aussehen.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.