Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1040to1044
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmte Zeilen in Textfile rauslöschen

Bestimmte Zeilen in Textfile rauslöschen
19.01.2009 18:33:00
Seluaner
Guten Abend zusammen !
Mittels dem folgenden Code - Ausschnitt (den hab ich übrigens mal hier im Forum von einem netten Forumanen erhalten)
lese ich grosse Textfiles ein und suche darin nach der Zeile mit dem Tittel "Generierungsprotokoll"
Alles bis und mit dieser Zeile wird gelöscht und wieder ins File geschrieben.
Sub DateiImport()
Dim varDatei, strText As String, arrTemp As Variant, intI As Integer
Dim intFF As Integer, wks As Worksheet, lngZeile As Long, intLine As Integer
Dim strSp1$, strSp2$, strSp3$, strSp4$, strSp5$
Dim Zeile As Long 'Variable um Zeile mit "Generierungsprotokoll" auszulesen und dann zu löschen inkl. der nächsten beiden folgenden Zeilen
Dim strTXT_File As String, sInhalt As String 'Variablendeklaration für Bearbeitung Textfile vor Import
Dim F As Integer 'Variablendeklaration für Bearbeitung Textfile vor Import
'TEXTDATEI I VORBEARBEITEN (Alles Löschen bis Generierungsprotokoll)
'===================================================================
strTXT_File = Application.GetOpenFilename(Filefilter:="Texte(*.txt),*.txt", Title:="Bitte erste Datendatei öffnen")
F = FreeFile
'Lese TXT
Open strTXT_File For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close #F
'Anfang abschneiden
sInhalt = Right$(sInhalt, Len(sInhalt) - InStrRev(sInhalt, "Generierungsprotokoll") - Len("Generierungsprotokoll"))
sInhalt = Right$(sInhalt, Len(sInhalt) - InStr(sInhalt, vbNewLine))
'Schreibe TXT
Open strTXT_File For Output As #F
Print #F, sInhalt
Close #F
Dies funktioniert auch ganz toll !
Nun möchte ich aber den Code noch um folgende Funktion ergänzen:
In den Textfiles drin hat es Seitenumbrüche (das Textfile wurde aus SAP - Listen erstellt)
welche so ausschauen:
---------------------------------------------- etc.
Diese Zeilen sollen auch noch gesucht und so entfernt werden, dass im Textfile drin dann keine Leerzeilen entstehen.
Geht das irgendwie ?
Wenn ja wie ?
Wer kann mir da helfen ? Ein Beispiel von der Textdatei im Anhang !
https://www.herber.de/bbs/user/58589.txt
IM VORAUS HERZLICHEN DANK !!!!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Zeilen in Textfile rauslöschen
19.01.2009 18:56:20
Tino
Hallo,
hat die Zeichenfolge immer die gleiche länge, kannst Du es so machen.
Wenn nicht melde dich nochmal.

sinhalt = Right$(sinhalt, Len(sinhalt) - InStrRev(sinhalt, _
"Generierungsprotokoll") - Len("Generierungsprotokoll"))
sinhalt = Right$(sinhalt, Len(sinhalt) - InStr(sinhalt, vbNewLine))
sinhalt = Replace(sinhalt, String(80, "-") & vbCrLf, "")


Gruß Tino

ist diese Zeichenfolge Variabel...
19.01.2009 19:29:00
Tino
Hallo,
, können wir es so machen.
Im Beispiel ist die Anzahl der Zeichen "-" mindestens 4.
Sub DateiImport()

Dim varDatei, strText As String, arrTemp As Variant, intI As Integer
Dim intFF As Integer, wks As Worksheet, lngZeile As Long, intLine As Integer
Dim strSp1$, strSp2$, strSp3$, strSp4$, strSp5$
Dim meArea() As String, meArae2() As String
Dim A As Long, B As Long

Dim Zeile As Long 'Variable um Zeile mit "Generierungsprotokoll" auszulesen und dann zu löschen inkl. der nächsten beiden folgenden Zeilen 

Dim strTXT_File As String, sInhalt As String 'Variablendeklaration für Bearbeitung Textfile vor Import 
Dim F As Integer 'Variablendeklaration für Bearbeitung Textfile vor Import 

'TEXTDATEI I VORBEARBEITEN (Alles Löschen bis Generierungsprotokoll) 
'=================================================================== 
strTXT_File = Application.GetOpenFilename(Filefilter:="Texte(*.txt),*.txt", Title:="Bitte erste Datendatei öffnen")

F = FreeFile
'Lese TXT 
Open strTXT_File For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close #F

'Anfang abschneiden 
sInhalt = Right$(sInhalt, Len(sInhalt) - InStrRev(sInhalt, "Generierungsprotokoll") - Len("Generierungsprotokoll"))
sInhalt = Right$(sInhalt, Len(sInhalt) - InStr(sInhalt, vbNewLine))

meArea = Split(sInhalt, vbCrLf)
sInhalt = ""
For A = Lbound(meArea) To Ubound(meArea)
 If Not meArea(A) Like "----*" Then 'hier mindestens vier Zeichen enthalten 
  Redim Preserve meArae2(B)
  meArae2(B) = meArea(A)
  B = B + 1
 End If
Next A

sInhalt = Join(meArae2, vbCrLf)

'Schreibe TXT 
Open strTXT_File For Output As #F
Print #F, sInhalt
Close #F

Erase meArea: Erase meArae2


Gruß Tino

Anzeige
AW: Bestimmte Zeilen in Textfile rauslöschen
20.01.2009 11:20:21
Seluaner
Hi Tino
Obiger Code von Dir scheint zu funzen.
Aber wenn die Zeilenlänge nicht genau so lang ist:
--------------------------------------------------------------------------------
gehts ned.
Und die anderen Codes funktionieren nicht. D.h. laufen zwar Fehlerfrei, aber es wird zuviel abgeschnitten von den Files.
Wie müsste ich also Deinen Code (siehe unten) anpassen, damit auch eine Zeichenlänge ungleich
--------------------------------------------------------------------------------
gefunden und rausgelöscht wird ?
Es soll also folgendes gemacht werden:
- Ab Textfile-Kopf soll alles bis und mit der Zeile "Generierungsprotokoll" gelöscht werden.
- danach sollen alle Zeilen --------------------------------------------------------------------------------
gelöscht werden.
- der Rest muss im File stehen bleiben !
Danke für Deine Hilfe !
Anzeige
noch eine...
20.01.2009 07:58:25
Tino
Hallo,
bei großen Textdateien, sollte diese Variante wesentlich schneller sein.
Das Zeichen – sollte aber mindestens 2-mal vorhanden sein,
ist dieses Zeichen an anderer Stelle auch zweimal vorhanden, müssen wird die Anzahl erhöhen,
sonst wird der falsche Text rausgeschnitten.
Sub DateiImport()

Dim varDatei, strText As String, arrTemp As Variant, intI As Integer
Dim intFF As Integer, wks As Worksheet, lngZeile As Long, intLine As Integer
Dim strSp1$, strSp2$, strSp3$, strSp4$, strSp5$
Dim tempText1 As String, tempText2 As String

Dim Zeile As Long 'Variable um Zeile mit "Generierungsprotokoll" auszulesen und dann zu löschen inkl. der nächsten beiden folgenden Zeilen 

Dim strTXT_File As String, sInhalt As String 'Variablendeklaration für Bearbeitung Textfile vor Import 
Dim F As Integer 'Variablendeklaration für Bearbeitung Textfile vor Import 

'TEXTDATEI I VORBEARBEITEN (Alles Löschen bis Generierungsprotokoll) 
'=================================================================== 
strTXT_File = Application.GetOpenFilename(Filefilter:="Texte(*.txt),*.txt", Title:="Bitte erste Datendatei öffnen")

F = FreeFile
'Lese TXT 
Open strTXT_File For Binary As #F
sInhalt = Space$(LOF(F))
Get #F, , sInhalt
Close #F

'Anfang abschneiden 
sInhalt = Right$(sInhalt, Len(sInhalt) - InStrRev(sInhalt, "Generierungsprotokoll") - Len("Generierungsprotokoll"))
sInhalt = Right$(sInhalt, Len(sInhalt) - InStr(sInhalt, vbNewLine))
tempText1 = Left$(sInhalt, InStr(sInhalt, "--") - 1)
tempText2 = Right$(sInhalt, Len(sInhalt) - InStrRev(sInhalt, "--" & vbNewLine) - 3)
sInhalt = tempText1 & tempText2

'Schreibe TXT 
Open strTXT_File For Output As #F
Print #F, sInhalt
Close #F


Gruß Tino

Anzeige
AW: noch eine...
20.01.2009 09:47:00
Seluaner
Hallo allerseits !
Vorerst mal vielen herzlichen Dank allen für die vielen netten tips und Codes !
ich werde mal testen, welches der geeigneteste Code ist.
(meines Wissens sind die ----- Linien nicht immer gleich Lang (also variabel)
Ich werde Euch selbstverständlich über die Ergebnisse informieren
Nochmals ein HERZLICHES DANKESCHÖN allen, welche mir hier immer wieder helfen !
So viele waren es doch gar nicht. ;-)
20.01.2009 09:56:31
Tino
Hallo,
"...Vorerst mal vielen herzlichen Dank allen für die vielen netten tips und Codes..."
Gruß Tino

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige