mmaiwald
Goto Top

Textdatei einlesen und per VBScript umformatieren

Hallo Forummitglieder,

Ich bräuchte einen Ansatz für ein VB Script

IST:
Ich habe eine Datei, die folgenden Inhalt hat

Meldung 1 Nummer
Text1
Text1
Text1
Meldung 2 Nummer
Text2
Text2
Text2
Text2
usw.

SOLL:
Ich möchte folgendes Ausgabeformat
Meldung 1 Nummer Text1 Text1 Text1
Meldung 2 Text2 Text2 Text2


Die Schleife sieht bei mir wie folgt aus

Do Until objEingabe.AtEndOfStream
Zeile = objEingabe.Readline
If Left(Zeile, 7)= "Meldung" And Instr(Zeile, "Nummer") Then
Position = 0
objAusgabe.Writeline(Zeile)
End If
Loop

Ich bekomme die Meldungen mit der Nummer ausgegeben. Ich möchte den in den nächsten Zeilen bestehenden Text mit ausgegeben bekommen.
Kann mir da jemand helfen?.

Vielen Dank für die Hilfe

Content-Key: 286380

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

Printed on: April 23, 2024 at 22:04 o'clock

Member: SlainteMhath
SlainteMhath Oct 23, 2015 at 07:14:48 (UTC)
Goto Top
Moin,

versuchs mal mit

Meldung=""  
Do Until objEingabe.AtEndOfStream
	Zeile = objEingabe.Readline
	If Left(Zeile, 7)= "Meldung" And Instr(Zeile, "Nummer") Then  
		if Meldung<>"" then objAusgabe.Writeline(Zeile)  
		Meldung=Zeile
	else
		Meldung=Meldung + " " + Zeile  
	End If
Loop


Code ohne Gewähr, da Kaffeelevel noch zu niedirig .)

lg,
Slainte
Member: emeriks
emeriks Oct 23, 2015 at 07:43:35 (UTC)
Goto Top
So müsste es auch gehen

Dim Messages : Messages = Split(objEingabe.ReadAll, "Meldung")  
Dim NewFileText : NewFileText = "dummydummydummy"  
Dim Message
For Each Message In Messages
  NewFileText = NewFileText & vbnewline & "Meldung" & Replace(Message, vbNewLine, " ")   
  'oder statt " " ein vbTab, falls gewünscht  
Next
NewFileText = Replace(NewFileText, "dummydummydummy" & vbNewLine, "")  
objAusgabe.Write NewFileText
Member: MMaiwald
MMaiwald Oct 23, 2015 at 09:41:58 (UTC)
Goto Top
Hallo Slainte,

vielen Dank für deine Antwort.

Der Code ändert nichts an meiner Ausgabe.
Ich kenne mich noch nicht mit VBSript aus. Ich habe diesen Code von jemand übernommen und angepasst.
Es wäre für mich hilfreich, wenn du deinen Code erklärst.

Ich verstehe diesen so:
1. Du definierst eine Variable "Meldung"
2. der Teil in der Schleife if Meldung... fragt, ob Meldung ungleich "" ist und schreibt dann in die Zeile
3. Deklaration der Variable Meldung mit dem Inhalt von Zelle
4. Sonst (else) ?

Ich würde folgendes machen oder so verstehe ich das
1. Auslesen der Textdatei
2. Wenn ich in der Zeile die Wörter "Meldung" und "beliebige Nummer" gefunden wird, dann schreibe diese Info in die Zeile
3. Gehe eine Zeile tiefer und schaue ob dort Text steht (welcher nicht "Meldung" und "beliebige Nummer ist")
4. Hänge diesen Text an die bestehende Zeile an
5. Mache dieses so lange, bis wieder die Wörter (Meldung und beliebige Nummer) erscheinen

Ich hoffe, ich habe mich verständlich ausgedrückt

Gruß
Mario
Member: SlainteMhath
SlainteMhath Oct 23, 2015 at 10:04:14 (UTC)
Goto Top
Der Code macht folgendes:

1: Variable Meldiung auf "" setzen
2: Schleife um Textdatei zu durchlaufen
3: Zeile aus Textdatei lesen und in Variable Zeile speichern
4: wenn die linken 7 Buchstaben der Zeile = "Meldung" und das Worter "Nummer" sich in der Zeile befinden, dann
5: Wenn Variable Meldung ungleich "", dann schreibe Zeile in objAusgabe
6: Setze Variable Meldung gleich Variable Zeile
7: sonst
8: Setze Meldung gleich Meldung plus Zeile
9: Ende Wenn
10: Ende Schleife

(ggfs musst du nachdem die Schleife beendet wurde "Meldung", wenn ungleich "" nochmal nach objAusgabe schreiben, da am Schluss ja nicht nochmal eine Zeile mit "Meldung ... Nummer" folgt.
Member: MMaiwald
MMaiwald Oct 23, 2015 at 10:20:08 (UTC)
Goto Top
Hallo Emeriks,

könntest du mir einen Ansatz geben, dass die Eingabedatei nicht gleichzeitig als Ausgabedatei dient.

Gruß
Mario
Member: MMaiwald
MMaiwald Oct 23, 2015 at 11:18:31 (UTC)
Goto Top
Hallo Slaite,

ich hatte die Ausgabe nochmals wie von dir empfohlen angehangen.
Jetzt sieht meine Ausgabedatei wie das Original aus.
Daher schicke ich dir mein Script und die Originaldatei bzw. die auszusehende Ausgabedatei mit.

Was kann ich noch machen?

Gruß
Mario


Script:

Option Explicit

'* Variablen & Konstanten definieren *
Dim fso, objEingabe, objAusgabe
Dim AusgabePfad, AusgabeDatei, EingabePfad, EingabeDatei, Zeile, Position, I
Dim Meldung : Meldung=""

EingabePfad = "C:\Users\xxxx\Documents\Skripte\"
EingabeDatei = "langtexte_Originalmeldung.txt"
AusgabePfad = "C:\Users\xxxx\Documents\Skripte\"
AusgabeDatei = "Ausgabe.txt"

Const ForReading = 1
Const ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject") ' Objekt für Dateisystem erstellen
Set objEingabe = fso.OpenTextFile(EingabePfad & EingabeDatei, ForReading)
Set objAusgabe = fso.OpenTextFile(AusgabePfad & AusgabeDatei, ForWriting, True)

Do Until objEingabe.AtEndOfStream
Zeile = objEingabe.Readline
If Left(Zeile, 7)= "Meldung" And Instr(Zeile, "LTXT QMEL") Then
'Abfrage der restlichen Zeilen
if Meldung<>"" then objAusgabe.Writeline(Zeile)
Meldung=Zeile
else
Meldung=Meldung + " " + Zeile
objAusgabe.Writeline(Zeile)
End If
Loop

objAusgabe.Close
objEingabe.Close

Set objEingabe = Nothing
Set objAusgabe = Nothing
Set fso = Nothing

MsgBox "Script beendet"


Originaldatei

Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxx)


xxxx- xxxx vom 17.6.xx

Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand
geschraubt - schräg einstellbar - mit xxxx abstimmen


Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxx)


xxxx- xxxx vom 17.6.xx

Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand
schraubbar und schräg einzustellen, mit xxxx abstimmen


Ausgabedatei (alles auf eine Zeile)

Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx)¶<CR>xxxx- Hausschau vom 17.6.xx<CR><CR>Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand<CR>geschraubt - schräg einstellbar - mit xxxx abstimmen<CR><CR><CR>
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx)¶<CR>xxxx- Hausschau vom 17.6.xx<CR><CR>Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand<CR>schraubbar und schräg einzustellen, mit xxxx abstimmen<CR><CR><CR>
Member: SlainteMhath
SlainteMhath Oct 23, 2015 at 11:24:57 (UTC)
Goto Top
Die beiden WriteLines müssen natürlich die Variable Meldung schrieben, nicht die Variable Zeile - sorry, mein Fehler.
Member: MMaiwald
MMaiwald Oct 23, 2015 at 11:36:24 (UTC)
Goto Top
wir kommen der Sache näher.

Ich hätte gern alle Informationen zu Meldung 1 und 2 jeweils nur in einer Zeile zu stehen haben.

Gruß
Mario


Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx)
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx)
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand geschraubt - schräg einstellbar - mit xxxx abstimmen
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand geschraubt - schräg einstellbar - mit xxxx abstimmen
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand geschraubt - schräg einstellbar - mit xxxx abstimmen
Meldung 1 : LTXT QMEL 000012008861 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xx Fahrradkeller - bitte Fahrradständer liefern und montieren - an die wand geschraubt - schräg einstellbar - mit xxxx abstimmen
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx)
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx)
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand schraubbar und schräg einzustellen, mit xxxx abstimmen
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand schraubbar und schräg einzustellen, mit xxxx abstimmen
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand schraubbar und schräg einzustellen, mit xxxx abstimmen
Meldung 2 : LTXT QMEL 000012008960 fehlt, liefern und einbauen (xxxx) xxxx- Hausschau vom 17.6.xxxx Fahrradraum - bitte Fahrradständer liefern und montieren, an die Wand schraubbar und schräg einzustellen, mit xxxx abstimmen
Member: SlainteMhath
SlainteMhath Oct 23, 2015 at 11:53:24 (UTC)
Goto Top
das "objAusgabe.Writeline(Meldung)" vor dem "End if" muss weg.
Dafür nach dem "Loop" ein "if Meldung<>"" then objAusgabe.Writeline(Meldung)" einfügen

Das ganze wäre einfacher zu debuggen, wenn du dein Script in Code Tags setzen würdest face-smile
Member: MMaiwald
MMaiwald Oct 23, 2015 at 12:07:01 (UTC)
Goto Top
Hallo Slainte,

das objAusgabe.Writeline(Meldung)" vor dem "End if" hatte ich auch herausgefunden und das ist meine Lösung.
Vielen Dank für deine schnelle Hilfe.

Ich finde das auch nicht so übersichtlich. Werde mir wohl mal die Dokumentation ansehen face-wink

Gruß und schönes Wochenende
Mario
Member: emeriks
emeriks Oct 23, 2015 at 12:50:06 (UTC)
Goto Top
könntest du mir einen Ansatz geben, dass die Eingabedatei nicht gleichzeitig als Ausgabedatei dient.
In meinem Bsp. habe ich das getrennt. Letzte Zeile --> "objAusgabe"
Oder was meinst Du jetzt?
Member: emeriks
emeriks Oct 23, 2015 at 13:04:04 (UTC)
Goto Top
Wenn Du es ganz "straff" habe willst, dann ginge es auch so.
Const InFile = "pfad-zur-Eingabe-datei"  
Const OutFile = "pfad-zur-Ausgabegabe-datei"  
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")  
Dim Messages : Messages = Split(FSO.OpenTextFile(InFile).ReadAll, "Meldung")  
Dim NewFileText : NewFileText = ""  
Dim Message
For Each Message In Messages
  NewFileText = NewFileText & "Meldung" & Replace(Message, vbNewLine, " ") & vbnewline  
  'oder statt " " ein vbTab, falls gewünscht  
Next
FSO.CreateTextFile(OutFile, True).Write NewFileText
Set FSO = Nothing

Hier könnte sogar OutFile = InFile sein, weil in Zeile 4 die Eingabe-Datei sofort wieder geschlossen wird. Dazu müsste man in Zeile 11 "OutFile" mit "InFile" ersetzen.