uppe
Goto Top

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

Content-Key: 153877

Url: https://administrator.de/contentid/153877

Printed on: April 19, 2024 at 12:04 o'clock

Member: micneu
micneu Oct 27, 2010 at 09:37:48 (UTC)
Goto Top
ein fall für sed und/oder awk face-wink

auf welchem system willst du es gelöst haben?
Member: Uppe
Uppe Oct 27, 2010 at 09:57:49 (UTC)
Goto Top
Hallo,

habe gerade mal nach sed und awk gegoogelt. Oh, oh, da steht mir ja was bevor! Ich habe bisher mit vbscript rumgedoktert.

Es sind Log-Dateien in einem Windows-Verzeichnis.

Gruß Uppe
Member: micneu
micneu Oct 27, 2010 at 10:16:05 (UTC)
Goto Top
von welchem programm?
würde mir noch etwas helfen ein awk script zu schreiben.
bin schon dabei mit den daten die ich von dir habe
Member: Uppe
Uppe Oct 27, 2010 at 10:32:42 (UTC)
Goto Top
wie "von welchem Programm"? Es sind die Logdateien eines Legato Networkers.
Member: miniversum
miniversum Oct 27, 2010 at 11:33:17 (UTC)
Goto Top
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.
InGruppe1 = 0
InTextmarke1 = 0
SchreibZeile = ""
Du liest in einer Schleife Zeile für Zeile ein (aktZeile).
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.
Member: bastla
bastla Oct 27, 2010 at 15:49:58 (UTC)
Goto Top
Hallo Uppe!

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
Annahmen:
  • 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
Member: Uppe
Uppe Oct 27, 2010 at 20:34:32 (UTC)
Goto Top
Hallo bastla,

vielen Dank! Damit kann ich es für mich anpassen. Super!

Gruß Uppe