steevede
Goto Top

Zeilenumbruch aus Textdatei löschen oder ersetzen mit VB-Sript

Hallo! Vermutlich ist mein Problem für erfahrene VBler eine Fingerübung ... aber ich bin absoluter Anfänger und verzweifle an diesem kleinen Problem!

Aus einer Textdatei (diese stammt aus einem Mailprogramm - kann einfach mit dem Windows Editor geöffnet werden) sollen bestimmte Zeichen aussortiert und ersetzt werden - das ist auch kein Problem für mich ... dafür habe ich mir ein VB-Script erstellt, das auch gut funktioniert! Allerdings muss auch ein Zeichen, das immer von einem Zeilenwechsel gefolgt wird ersetzt werden und zwar inklusive Zeilenumbruch! Das Zeichen zu entfernen ist kein Problem ... aber wie mach ich VB klar, dass auch der Zeilenumbruch nach diesem Zeichen entfernt werden soll? Versuche mit vbLf , vbCr, vbCrLf waren erfolglos - damit kann ich zwar einen Zeilenwechsel einfügen, aber nicht den Zeilenwechsel erkennen und ersetzen! Die Folgezeile soll einfach angehängt werden! Hier mein Beispiel:

Erst-irgendein-text-und-das-letzte-zeichen-dieser-zeile-soll-gelöscht-werden# (<- hier ist der böse Zeilenwechsel!!)
und-dies-soll-hinten-dran-in-die-obere-Zeile

Hat da jemand eine Lösung für mich?
Wie gesagt: das "#" zu löschen oder zu ersetzen ist kein Problem ... aber was muß ich zum Löschen des Leerzeichens im VB-Script eintragen ( /r/n war auch ein Versuch ... hat nicht funktioniert!)
Mein Versuch war folgendermassen:

FeldtrennerAlt = "#" & vbLf
FeldtrennerNeu = "Test"

Diese Zeilen haben im text gar nichts verändert!
Wenn ich "& vbLf" weglasse, ersetzt das Script das "#" durch das Wort "Test" ... der Zeilenwechsel bleibt aber bestehen
Ich bin für jeden Tip dankbar!!

Content-Key: 119611

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

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

Member: Logan000
Logan000 Jul 02, 2009 at 12:47:48 (UTC)
Goto Top
Moin Moin

Versuch doch mal mit
FeldtrennerAlt = "#" & vbCrLf  
....

Gruß L.
Member: Steevede
Steevede Jul 02, 2009 at 12:53:06 (UTC)
Goto Top
Zitat von @Logan000:
Moin Moin

Versuch doch mal mit
> FeldtrennerAlt = "#" & vbCrLf  
> ....
> 

Gruß L.


Hallo Logan000!
Hab ich schon probiert! (siehe oben in meinem Text) - in allen Fällen (vbCr, vbLf und vbcrLf) kein Erfolg ... wie gesagt zum Einfügen eines Zeilenwechsels kann man sie benutzen ... aber leider nicht zum Entfernen!
Member: TsukiSan
TsukiSan Jul 02, 2009 at 13:03:01 (UTC)
Goto Top
Hallo

man könnte doch erst mal mit der InStr herausfinden, wo die "#" steht, dann - aber nur wenn es einen Zeilenumbruch immer gibt! - ließt man sich mittels der Stringvariable1 alle Zeichen davor ein
Stringvariable 1 = mid
(Textkomplett,1,bisAnDieStelleWoDie#Steht)
dann sucht man weiter nach dem Leerzeichen, welches ja für den Zeilenumbruch stehen müßte
und übergibt den Rest in ähnlicher Weise an Stringvariable2.
Anschließend führt man Stringvariable1 und 2 zusammen.

Gruß
Tsuki
Mitglied: 27234
27234 Jul 02, 2009 at 13:10:10 (UTC)
Goto Top
Hallo,

ich nutze für dieses Problem immer "TR.EXE".
Einfach mal googeln oder eine Nachricht an mich, dann sende ich Dir das zu.

Gruß René
Member: Logan000
Logan000 Jul 02, 2009 at 13:19:35 (UTC)
Goto Top
Moin

Evtl genügt es ja auch den Text gleich, nur Zeilenweise einzulesen, z.B.
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objSourceFile = objFSO.OpenTextFile("Source.txt", 1)	' Quelldatei öffnen  
	Do Until objSourceFile.AtEndOfStream 	
		szNextLine = objSourceFile.Readline	
		if Right(szNextLine,1) = "#"  Then	  
                   '  jetzt nächste zeile holen und zusammen setzen  
		end if		
	Loop

Gruß L.
Member: TsukiSan
TsukiSan Jul 02, 2009 at 13:26:14 (UTC)
Goto Top
Hi,

ich denke Logan000 schreibt da einen guten Ansatz, wie sich soetwas als Script umsetzen läßt. Meine Idee (siehe oben) würde VBS und VB etwas vermischen.

Gruß
Tsuki
Member: Steevede
Steevede Jul 02, 2009 at 13:29:11 (UTC)
Goto Top
Zitat von @TsukiSan:
Hallo

man könnte doch erst mal mit der InStr herausfinden, wo die
"#" steht, dann - aber nur wenn es einen Zeilenumbruch immer
gibt! - ließt man sich mittels der Stringvariable1 alle Zeichen
davor ein
> Stringvariable 1 = mid
> (Textkomplett,1,bisAnDieStelleWoDie#Steht)
> 
dann sucht man weiter nach dem Leerzeichen, welches ja für den
Zeilenumbruch stehen müßte
und übergibt den Rest in ähnlicher Weise an
Stringvariable2.
Anschließend führt man Stringvariable1 und 2 zusammen.

Gruß
Tsuki


Hallo!
Das ist zwar eine Idee - löst aber das Problem nicht wirklich!
Der Text ist natürlich wesentlich länger als die zwei Zeilen, die ich hier beispielhaft angeführt habe und das Zeichen "#" kommt natürlich im Text auch an anderen Stellen vor - entfernt werden soll es dann (und nur dann), wenn es von einem Zeilenwechsel gefolgt wird das heißt, ich muß im Suchstring ganz explizit nach "#" & Zeilenwechsel suchen und durch einen Ersatzstring ersetzen! Mein Problem ist: Ich weiß nicht, wie ich ins VB-Sript den Zeilenwechsel eingeben muß! Die Syntax vbCrLf steht normalerweise für den Zeilenwechsel - funktioniert aber nicht!
Wäre es denn möglich, wenn ich mir einen "Test.txt" , der nur einmal das Zeichen und den Zeilenwechselenthält, erstelle (z.B. nur die obigen 2 Zeilen) und einfach nach deiner Idee diesen "abgespeckten" Text durchsuchen lasse - wenn es möglich wäre mir einfach in eine Datei ausgeben zu lassen, was dierekt hinter dem "#" steht (also den Inhalt dieser gefundene Variable in eine Datei umleiten und hinterher nachsehen, wie der richtige "Code" für den Zeilenwechsel lautet?) ... aber vermutlich wird dabei nur eine leere Datei mit einem einsamen Zeilenwechsel entstehen ... das hilft mir dann auch nicht weiter face-wink
... wie gesagt: eigentlich habe ich nur ein "Sprachproblem" , weil ich die richtige Schreibweise für den Zeilenwechsel nicht kenne! So ein Sript wie oben vorgeschlagen (sofern es denn möglich ist) übersteigt derzeit auch meine VB-Kenntnisse weit! Wie müßte sowas denn aussehen?
Member: Steevede
Steevede Jul 03, 2009 at 19:44:40 (UTC)
Goto Top
Hallo nochmal an alle, die es interessiert:
Die Lösung ist gefunden!
Ehre und Lob sei Bolle97, der mir den richtigen Lösungsansatz gesendet hat!
Hier nochmals mein Dank und ein ehrfürchtiges "Wow" vor so viel Sachverstand!
Die Lösung war folgende:
Um einen Zeilenwechsel in einem Text zu entfernen, muss der Text zunächst als ganzes eingelesen werden, da sich die Zeichen für den Zeilenwechsel auf zwei Zeilen verteilen : Linefeed am Ende der einen und neuer Zeilenbeginn auf der folgenden Zeile! Beim zeilenweise "durchforsten" der Datei wird natürlich immer nur der String für den Linefeed gefunden - der Zeilenbeginn steht ja erst in der nächsten Zeile! Durchsucht man aber den Text als ganzes, wird der Zeilenumbruch richtig erkannt und entfernt!
Mein funktionierendes Script sieht jetzt so aus:
'Variablen & Konstanten definieren  
Dim fso, objEingabe, objAusgabe, objSuchen
Dim Pfad, EingabeDatei, AusgabeDatei, Zeile

Suchen_Click()

Private Sub Suchen_Click()

Pfad = "C:\test\"  
EingabeDatei = "test.txt"  
AusgabeDatei = "aus.txt"  

Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Objekt erstellen  
Set fso = CreateObject("Scripting.FileSystemObject")  
If fso.FileExists(pfad & EingabeDatei) Then
Set objEingabe = fso.OpenTextFile(Pfad & EingabeDatei, 1)
Set objAusgabe = fso.OpenTextFile(Pfad & AusgabeDatei, 2,true)
Else
MsgBox "Fehler: Eingabedatei ist nicht vorhanden."  
Exit Sub
End If

do until objEingabe.AtEndOfStream
Zeile = objEingabe.ReadAll
zeile = Replace(zeile, "#" & vbcrlf, "")  

objAusgabe.Write (Zeile)
loop

objEingabe.Close
objAusgabe.Close

' Eingabedatei löschen  
fso.DeleteFile EingabeDatei, True
' Ausgabedatei umbenennen durch MoveFile  
fso.MoveFile Ausgabedatei, EingabeDatei

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

End Sub
Mit diesem Script werden nun alle # die vor einem Zeilenwechsel stehen inklusive Zeilenwechsel gelöscht; also wird:

Blablablablablabla#
Test!
zu
BlablablablablablaTest!

Danke an alle, die mir geantwortet und geholfen haben!!


[Edit Biber] Code in Code-Tags gesetzt.[/Edit]