WolleXPC 10 Geschrieben 6. Juni 2008 Melden Teilen Geschrieben 6. Juni 2008 Hallo, ich hab für eine Kollegin ein Makro in Excel geschrieben, wo aus einer Excel Tabelle eine Textdatei erstellt wird. Der Text bzw. die Zahlen sind speziel formatiert. Was ich bis jetzt noch nicht hin bekommen hab ist, dass Zeilen wo an der 60. Stelle einer Zeile die Zeichenfolge "0.00" auftritt gelöscht werden. Es soll also jede Zeile auf auf diese Zeichenfolge überprüft werden und wenn es zutrifft, gelöscht werden. Die Textdatei hat immer eine Zeilenanzahlvon 100 Zeilen Wäre super wenn mir einer dieses Script schreiben oder mich dabei unterstützen könnte. Vielen Dank Zitieren Link zu diesem Kommentar
Shemeneto 11 Geschrieben 6. Juni 2008 Melden Teilen Geschrieben 6. Juni 2008 die Lösung kann ich dir nicht bieten, da ich mich in VBA nicht auskenne. Aber einen kleinen Tipp habe ich: such mal nach: VBA RegExp pattern Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 19. Juni 2008 Autor Melden Teilen Geschrieben 19. Juni 2008 die Lösung kann ich dir nicht bieten, da ich mich in VBA nicht auskenne. Aber einen kleinen Tipp habe ich: such mal nach: VBA RegExp pattern Danke dir. Hab da mal was gebastelt aus Skripten die ich im Netz gefunden hab: 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 Set objRegExp = New RegExp 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, wird 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. Wie kann ich dies realisieren? Vielen Dank Gruß Wolle Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 19. Juni 2008 Melden Teilen Geschrieben 19. Juni 2008 D.h. "0.00 0.00" ist nur ein Teil der Zeile, die kpl. Zeile soll aber gelöscht werden? Ich würde vorschlagen, in diesem Fall die Datei Zeilenweise einzulesen und in eine 2.Datei wieder rauszuschreiben, ohne die entspr. Zeile eben. Hier ein entspr. Codefragment: Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="C:\Temp\DateiIn.txt" varTmpDatei="C:\Temp\Dateiout.txt" Set fin = MyFiles.OpenTextFile(varDatei, ForReading) Set fout = MyFiles.OpenTextFile(varTmpDatei, ForWriting, True) strSearch = "0.00 0.00" do while not fin.AtEndOfStream strline = fin.readLine() if instr(1,strline, strSearch) = 0 then 'Zu entfernende Zeile nicht gefunden, also Zeile ausgeben fout.writeline strline end if loop Ggf. hinterher dann noch Originaldatei löschen und neu erstellte umbenennen... Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 20. Juni 2008 Autor Melden Teilen Geschrieben 20. Juni 2008 D.h. "0.00 0.00" ist nur ein Teil der Zeile, die kpl. Zeile soll aber gelöscht werden?Ich würde vorschlagen, in diesem Fall die Datei Zeilenweise einzulesen und in eine 2.Datei wieder rauszuschreiben, ohne die entspr. Zeile eben. Hier ein entspr. Codefragment: Set MyFiles = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 varDatei="C:\Temp\DateiIn.txt" varTmpDatei="C:\Temp\Dateiout.txt" Set fin = MyFiles.OpenTextFile(varDatei, ForReading) Set fout = MyFiles.OpenTextFile(varTmpDatei, ForWriting, True) strSearch = "0.00 0.00" do while not fin.AtEndOfStream strline = fin.readLine() if instr(1,strline, strSearch) = 0 then 'Zu entfernende Zeile nicht gefunden, also Zeile ausgeben fout.writeline strline end if loop Ggf. hinterher dann noch Originaldatei löschen und neu erstellte umbenennen... Vielen Vielen Dank Es funktioniert einwandfrei. Zitieren Link zu diesem Kommentar
Spoonschbob 10 Geschrieben 18. Januar 2009 Melden Teilen Geschrieben 18. Januar 2009 Is zwar schon nen Weilchen her, aber das is bis jetzt das einzige Schnipsel, das ich gefunden hab, das funktioniert ;) Wie kann ich das jetzt noch machen, dass die Originaldatei gelöscht wird und die neue entsprechend umbenannt wird? (also dass die originaldatei "ersetzt" wird) Habs schon mit DeleteFile() und .Delete probiert, aber geht nicht. Denk mal das Problem is die Schleife...kriegs nich hin dass er das erst ausführt wenn alles fertig is... Danke für die Hilfe Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Januar 2009 Melden Teilen Geschrieben 18. Januar 2009 Hallo und Willkommen im Board, um bei obigem Beispiel zu bleiben: Die Datei, die da gelöscht werden soll, muss zunächst geschlossen werden und dann erst gelöscht. Ungefähr so: fin.close MyFiles.DeleteFile(varDatei) Umbenennen der Ausgabedatei dann z.B. mittels fout.Name = varDatei oder MyFiles.MoveFile varTmpDatei, varDatei ..das Ganze unterhalb des "loop" einfügen. Zitieren Link zu diesem Kommentar
Spoonschbob 10 Geschrieben 18. Januar 2009 Melden Teilen Geschrieben 18. Januar 2009 klasse, vielen Dank :) Die neue Datei muss aber wohl auch geschlossen werden, damits funktioniert ;) Danke :) Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 18. Januar 2009 Melden Teilen Geschrieben 18. Januar 2009 Mal eine Frage: Warum lässt Du die Zeilen beim Export nicht einfach weg ? Das ist sicher einfacher und sinnvoller als die Datei hinterher zu filtern. Wenn Du in Deinem Macro zeilenweise exportierst, kann Du das z.B. über ein IF-Statement erreichen. -Zahni Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.