Zeilen zwischen zwei Werten ausgeben
Hallo,
ich habe eine Datei, die wie folgt aufgebaut ist:
Gruppe1
blabla
blublu
Textmarke1
wichtig1
wichtig2
wichtig3
wichtig4
Textmarke2
blibli
bloblo
Gruppe2
haha
hihi
Textmarke1
wichtig5
wichtig6
wichtig7
Textmarke2
usw
Ich brauche aus dieser Datei jeweils die Gruppe und alles was zwischen Textmarke1 und Textmarke2 steht. Das möchte ich in einer neuen Datei mit Semikolon getrennt in eine Zeile schreiben.
Ich kann die Datei zeilenweise einlesen und auch die Gruppe in die neue Datei schreiben. Aber wie muß ich nun weitermachen, dass die Zeilen zwischen den Textmarken direkt hinter die jeweilige Gruppe geschrieben werden?
Danke und Gruß Uppe
PS: Die Leerzeilen sind willkürlich und ich brauche sie nicht.
blublu
ich habe eine Datei, die wie folgt aufgebaut ist:
Gruppe1
blabla
blublu
Textmarke1
wichtig1
wichtig2
wichtig3
wichtig4
Textmarke2
blibli
bloblo
Gruppe2
haha
hihi
Textmarke1
wichtig5
wichtig6
wichtig7
Textmarke2
usw
Ich brauche aus dieser Datei jeweils die Gruppe und alles was zwischen Textmarke1 und Textmarke2 steht. Das möchte ich in einer neuen Datei mit Semikolon getrennt in eine Zeile schreiben.
Ich kann die Datei zeilenweise einlesen und auch die Gruppe in die neue Datei schreiben. Aber wie muß ich nun weitermachen, dass die Zeilen zwischen den Textmarken direkt hinter die jeweilige Gruppe geschrieben werden?
Danke und Gruß Uppe
PS: Die Leerzeilen sind willkürlich und ich brauche sie nicht.
blublu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153877
Url: https://administrator.de/contentid/153877
Ausgedruckt am: 26.11.2024 um 21:11 Uhr
7 Kommentare
Neuester Kommentar
Wenn du schon mit vbscript angefangen hast dann würde ich damit weiter machen.
Du kannst die Datei ja komplett einlesen, dan hast du siein einer Variabeln.
Dann kannst über die instr Funktion die Position von Gruppe1 und Gruppe2 suchen und mit der Mid Funktion alles dazwischen raussuchen. Danach machst du das gleiche nochmal mit Textmarke1 und Textmarke2.
Alternativ kanns du auch gleich beim zeilenweisen einlesen Das wegschreiben was du brauchst.
Dabei arbeitest du mit z.b. 2 Variabeln, InGruppe1 und InTextmarke1. Beid setzt zu auf 0.
In der Schleife machst du eine Abfrage für Gruppe1, Gruppe2, Testmarke1 und für Testmarke2.
Du kannst die Datei ja komplett einlesen, dan hast du siein einer Variabeln.
Dann kannst über die instr Funktion die Position von Gruppe1 und Gruppe2 suchen und mit der Mid Funktion alles dazwischen raussuchen. Danach machst du das gleiche nochmal mit Textmarke1 und Textmarke2.
Alternativ kanns du auch gleich beim zeilenweisen einlesen Das wegschreiben was du brauchst.
Dabei arbeitest du mit z.b. 2 Variabeln, InGruppe1 und InTextmarke1. Beid setzt zu auf 0.
InGruppe1 = 0
InTextmarke1 = 0
SchreibZeile = ""
Du liest in einer Schleife Zeile für Zeile ein (aktZeile).InTextmarke1 = 0
SchreibZeile = ""
In der Schleife machst du eine Abfrage für Gruppe1, Gruppe2, Testmarke1 und für Testmarke2.
If aktZeile = "Gruppe2" then InGruppe1 = 0
If aktZeile = "Textmarke2" then InTextmarke1 = 0
If InGruppe1 = 1 and InTextmarke1 = 1 then SchreibZeile = SchreibZeile & aktZeile & ";"
If aktZeile = "Textmarke1" then InTextmarke1 = 1
If aktZeile = "Gruppe1" then InGruppe1 = 1
Und nach der Schleife schreibst du dann SchreibZeile in eine Datei.If aktZeile = "Textmarke2" then InTextmarke1 = 0
If InGruppe1 = 1 and InTextmarke1 = 1 then SchreibZeile = SchreibZeile & aktZeile & ";"
If aktZeile = "Textmarke1" then InTextmarke1 = 1
If aktZeile = "Gruppe1" then InGruppe1 = 1
Hallo Uppe!
Als VBS (ausgehend von der oben dargestellten Struktur) etwa so:
Annahmen:
Grüße
bastla
Als VBS (ausgehend von der oben dargestellten Struktur) etwa so:
Ein = "D:\Datei.txt"
Aus = "D:\Datei.csv"
Gruppe = "Gruppe"
Von = "Textmarke1"
Bis = "Textmarke2"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Set E = fso.OpenTextFile(Ein)
Set A = fso.CreateTextFile(Aus)
LGr = Len(Gruppe)
Do Until E.AtEndOfStream
ZEin = Trim(E.ReadLine) 'Leerzeichen vor und nach dem Text entfernen
If ZEin <> "" Then 'keine Leerzeilen verarbeiten
If Left(ZEin, LGr) = Gruppe Then 'Beginn Gruppe?
ZAus = ZEin 'Ausgabzeile beginnt mit Gruppennamen
ElseIf ZEin = Von Then 'Beginn "wichtiger" Bereich?
InBereich = True 'Schalter setzen
ElseIf ZEin = Bis Then 'Ende "wichtiger" Bereich?
A.WriteLine ZAus 'Zeile in Datei schreiben
InBereich = False 'Schalter rücksetzen
ElseIf InBereich Then 'Zeile aus "wichtigem" Bereich?
ZAus = ZAus & Delim & ZEin 'der Ausgabezeile (nach Trennzeichen) hinzufügen
End If
End If
Loop
A.Close
- Jede Gruppenbezeichnung beginnt mit "Gruppe" (siehe Zeile 3).
- Jede Gruppe enthält genau einen "wichtigen" Teil.
- Jeder "wichtige" Teil ist zuverlässig durch "Textmarke1" (= Von) und "Textmarke2" (=Bis) begrenzt.
- Groß-/Kleinschreibung der Gruppennamen und Textmarken stimmen mit den Angaben in den Zeilen 3 bis 5 überein.
- Leerzeichen an Beginn und Ende der Zeile dürfen entfernt werden, Leerzeilen fallen weg.
Grüße
bastla