Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung VB for Applications

Mitglied: Steevede

Steevede (Level 1) - Jetzt verbinden

02.07.2009, aktualisiert 14:40 Uhr, 15510 Aufrufe, 8 Kommentare

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!!
Mitglied: Logan000
02.07.2009 um 14:47 Uhr
Moin Moin

Versuch doch mal mit
01.
FeldtrennerAlt = "#" & vbCrLf 
02.
....
Gruß L.
Bitte warten ..
Mitglied: Steevede
02.07.2009 um 14:53 Uhr
Zitat von Logan000:
Moin Moin

Versuch doch mal mit
01.
> FeldtrennerAlt = "#" & vbCrLf 
02.
> .... 
03.
> 
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!
Bitte warten ..
Mitglied: TsukiSan
02.07.2009 um 15:03 Uhr
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
01.
Stringvariable 1 = mid 
02.
(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
Bitte warten ..
Mitglied: Bolle97
02.07.2009 um 15:10 Uhr
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é
Bitte warten ..
Mitglied: Logan000
02.07.2009 um 15:19 Uhr
Moin

Evtl genügt es ja auch den Text gleich, nur Zeilenweise einzulesen, z.B.
01.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
02.
Set objSourceFile = objFSO.OpenTextFile("Source.txt", 1)	' Quelldatei öffnen 
03.
	Do Until objSourceFile.AtEndOfStream 	 
04.
		szNextLine = objSourceFile.Readline	 
05.
		if Right(szNextLine,1) = "#"  Then	 
06.
                   '  jetzt nächste zeile holen und zusammen setzen 
07.
		end if		 
08.
	Loop
Gruß L.
Bitte warten ..
Mitglied: TsukiSan
02.07.2009 um 15:26 Uhr
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
Bitte warten ..
Mitglied: Steevede
02.07.2009 um 15:29 Uhr
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
01.
> Stringvariable 1 = mid 
02.
> (Textkomplett,1,bisAnDieStelleWoDie#Steht) 
03.
> 
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
... 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?
Bitte warten ..
Mitglied: Steevede
03.07.2009 um 21:44 Uhr
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:
01.
'Variablen & Konstanten definieren 
02.
Dim fso, objEingabe, objAusgabe, objSuchen 
03.
Dim Pfad, EingabeDatei, AusgabeDatei, Zeile 
04.
 
05.
Suchen_Click() 
06.
 
07.
Private Sub Suchen_Click() 
08.
 
09.
Pfad = "C:\test\" 
10.
EingabeDatei = "test.txt" 
11.
AusgabeDatei = "aus.txt" 
12.
 
13.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
14.
'Objekt erstellen 
15.
Set fso = CreateObject("Scripting.FileSystemObject") 
16.
If fso.FileExists(pfad & EingabeDatei) Then 
17.
Set objEingabe = fso.OpenTextFile(Pfad & EingabeDatei, 1) 
18.
Set objAusgabe = fso.OpenTextFile(Pfad & AusgabeDatei, 2,true) 
19.
Else 
20.
MsgBox "Fehler: Eingabedatei ist nicht vorhanden." 
21.
Exit Sub 
22.
End If 
23.
 
24.
do until objEingabe.AtEndOfStream 
25.
Zeile = objEingabe.ReadAll 
26.
zeile = Replace(zeile, "#" & vbcrlf, "") 
27.
 
28.
objAusgabe.Write (Zeile) 
29.
loop 
30.
 
31.
objEingabe.Close 
32.
objAusgabe.Close 
33.
 
34.
' Eingabedatei löschen 
35.
fso.DeleteFile EingabeDatei, True 
36.
' Ausgabedatei umbenennen durch MoveFile 
37.
fso.MoveFile Ausgabedatei, EingabeDatei 
38.
 
39.
Set objAusgabe = Nothing 
40.
Set objEingabe = Nothing 
41.
Set fso = Nothing 
42.
 
43.
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]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...