Jump to content

Löschen von bestimmten Zeilen in vbs


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar
  • 2 Wochen später...
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

Link zu diesem Kommentar

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...

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
  • 6 Monate später...

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...