thedog
Goto Top

Leerzeichen am Zeilenende entfernen

Hi,
ich habe schon ne ganze Weile gesucht und auch einen Ansatz gefunde. leider wurde mein Problem noch nicht zufriedenstellend gelöst

Mein Problem ist folgendes. Ich habe eine .txt in der leider an den Zeilenenden unterschiedlich viele Leerzeichen sind. Ich benötige die Datei aber ohne Leerzeichen am Zeilenende.
Ich habe hier im Forum schon eine Lösung gefunden (Leerzeichen am Ende der Zeile mittels Batch entfernen?)
Dummerweise löscht diese Lösung alle Leerzeichen. In manchen Zeilen von meiner .txt befinden sich aber auch in der Zeile Leerzeichen.
Diese dürfen nicht entfernt werden.
Schon mal im Vorraus vielen dank für eure Hilfe.

Content-Key: 66683

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: paulepank
paulepank 21.08.2007 um 11:12:29 Uhr
Goto Top
Hallo,
Ich habe eine .txt in der leider an den Zeilenenden unterschiedlich viele Leerzeichen sind.
Sicher , dass es nur Leerzeichen und nicht auch Tabs sind ?
Ich benötige die Datei aber ohne Leerzeichen am Zeilenende.
Code:
sed s/\x20*$// datei_mit_leerzeichen.txt >datei_ohne_leerzeichen.txt

Das Programm "sed" findest du selbst

Schon mal im Vorraus vielen dank für eure Hilfe.

Ganz schlecht, setze lieber den Beitrag auf gelöst.

cu paulepank
Mitglied: thedog
thedog 21.08.2007 um 11:31:15 Uhr
Goto Top
Problem ist, es sollte per Batch Datei gelöst werden, die auf jedem xbeliebigen Windows-XP Rechner läuft. Also geht es leider mit sed nicht.
Mitglied: paulepank
paulepank 21.08.2007 um 11:44:43 Uhr
Goto Top
Problem ist,
wie oft eine unvollkommene Problembeschreibung

es sollte per Batch Datei gelöst werden,
sed läuft auch in einer Batch

die auf jedem xbeliebigen Windows-XP Rechner läuft.
auf jedem xbeliebigen Rechner wird es solche txt.Dateien nicht geben
Wenn du die Batch auf jeden xbeliebigen Rechner verteilst kannst du gleichzeitig sed mit verteilen.
Also geht es leider mit sed nicht.
Dann doch

cu paulepank
Mitglied: bastla
bastla 21.08.2007 um 11:55:35 Uhr
Goto Top
Hallo thedog!

Falls unter diesen Voraussetzungen zumindest ein VB-Script in Frage kommt, dann etwa so:
'TTB.vbs  
Const BAK = ".bak"  
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count = 0 Then
		WScript.Echo "Es wurde keine Datei übergeben!"  
		WScript.Quit(1)
End If
sFile = WScript.Arguments(0)
If Not fso.FileExists(sFile) Then
	WScript.Echo sFile & " konnte nicht gefunden werden!"  
	WScript.Quit(1)
End If
Set oFile = fso.GetFile(sFile)
sFilePath = oFile.Path
If fso.FileExists(oFile.Name & BAK) Then fso.DeleteFile(oFile.Name & BAK)
oFile.Name = oFile.Name & BAK
Set oIn = fso.OpenTextFile(sFilePath & BAK, 1)
Set oOut = fso.OpenTextFile(sFilePath, 2, True)
Do While Not oIn.AtEndOfStream
	oOut.WriteLine RTrim(oIn.ReadLine)
Loop
oIn.Close
oOut.Close
Aufruf aus einem Batch mit
cscript //nologo PfadZumScript\TTB.vbs Textdatei.txt
Die ursprüngliche Textdatei bleibt dabei als Sicherung unter "Textdatei.txt.bak" bestehen.

Grüße
bastla

[Edit] Nachtrag: Zeile
If fso.FileExists(oFile.Name & BAK) Then fso.DeleteFile(oFile.Name & BAK)
zum Löschen bereits bestehender Sicherungskopie eingefügt. [/Edit]
Mitglied: thedog
thedog 21.08.2007 um 11:58:22 Uhr
Goto Top
Gibt es keine Möglichkeit mit Windowseigenem Boardwerkzeug des Problem zu lösen. Da wir dieses Batch Skript für .txt Dateien nutzen wollen, die auf nem Netzlaufwerk lagern wäre es äusserts praktisch, wenn man es ohne irgendwelche externen Tools verwenden könnte.


@bastla: Ein einfaches batch Skript wäre mir lieber. wenns irgendwie geht (Hatte mich vertippt face-confused)
Mitglied: paulepank
paulepank 21.08.2007 um 12:10:53 Uhr
Goto Top
Hallo,
Da wir dieses Batch Skript für .txt Dateien nutzen wollen, die auf nem Netzlaufwerk lagern

Wozu soll jetzt die Batch auf jedem Rechner laufen ? Du schreibst etwas wirr mein Bester.

cu paulepank
Mitglied: bastla
bastla 21.08.2007 um 12:14:32 Uhr
Goto Top
Hallo thedog!

"bash", aber kein "sed"? Jetzt hast Du mich auch verwirrt ...

Grüße
bastla
Mitglied: bastla
bastla 21.08.2007 um 12:38:23 Uhr
Goto Top
... aber solltest Du "Batch" gemeint haben, dann:
@echo off & setlocal
set TTB=%temp%\TTB.vbs
echo BAK=".bak":Set fso=CreateObject("Scripting.FileSystemObject"):sFile=WScript.Arguments(0)>%TTB%  
echo Set oFile=fso.GetFile(sFile):sFilePath=oFile.Path:If fso.FileExists(oFile.Name^&BAK) Then fso.DeleteFile(oFile.Name^&BAK)>>%TTB%
echo oFile.Name=oFile.Name^&BAK:Set oIn=fso.OpenTextFile(sFilePath^&BAK,1):Set oOut=fso.OpenTextFile(sFilePath,2,True)>>%TTB%
echo Do While Not oIn.AtEndOfStream:oOut.WriteLine RTrim(oIn.ReadLine):Loop:oIn.Close:oOut.Close>>%TTB%
cscript //nologo %TTB% Textdatei.txt
del %TTB%
Die zu bearbeitende Datei ("Textdatei.txt") ist in der vorletzten Zeile anzugeben.

Grüße
bastla
Mitglied: thedog
thedog 21.08.2007 um 13:27:33 Uhr
Goto Top
... aber solltest Du "Batch"
gemeint haben, dann:
@echo off & setlocal
> set TTB=%temp%\TTB.vbs
> echo BAK=".bak":Set  
> fso=CreateObject("Scripting.FileSystemObject"):sFile=WScript.Arguments(0)>%TTB%  
> echo Set
> oFile=fso.GetFile(sFile):sFilePath=oFile.Path:If
> fso.FileExists(oFile.Name^&BAK) Then
> fso.DeleteFile(oFile.Name^&BAK)>>%TTB%
> echo oFile.Name=oFile.Name^&BAK:Set
> oIn=fso.OpenTextFile(sFilePath^&BAK,1):Set
> oOut=fso.OpenTextFile(sFilePath,2,True)>>%TTB%
> echo Do While Not
> oIn.AtEndOfStream:oOut.WriteLine
> RTrim(oIn.ReadLine):Loop:oIn.Close:oOut.Close>>%TTB%
> cscript //nologo %TTB% Textdatei.txt
> del %TTB%
> 
Die zu bearbeitende Datei
("Textdatei.txt") ist in der
vorletzten Zeile anzugeben.

Grüße
bastla


Es kommt ne Fehlermeldung:
TTB.vbs(3, 1) Laufzeitfehler in Microsoft VBS
cript: Die Datei ist bereits vorhanden.
Beim ersten Mal hats noch funktioniert. jetzt leider nicht mehr face-sad

Edit:
if exist Textdatei.txt del Textdatei.txt
if exist Textdatei.txt.bak del Textdatei.txt.bak

Die zwei Zeilen an den Anfank der Batch Datei anfügen und es klappt :D

Danke an Bastla für seine vbs/Batch Skript :D
Natürlich würde ich mich über ein reines Batch Skript weiterhin freuen.
Mitglied: bastla
bastla 21.08.2007 um 21:02:46 Uhr
Goto Top
Hallo thedog!

Das Löschen einer bereits bestehenden Sicherungskopie wird jetzt auch vom ersten Script selbst übernommen, sodass auch Deine zweite Batchzeile nicht mehr benötigt wird ...

Natürlich würde ich mich über ein reines Batch Skript weiterhin freuen.
Warum?

Grüße
bastla
Mitglied: Biber
Biber 22.08.2007 um 03:13:15 Uhr
Goto Top
Moin thedog,

bis auf weiteres schließe ich mich bastla's "Warum?" an.
Außerdem noch die Nachfrage: WTF sind denn diese "ein oder mehrere Leerzeichen am Zeilenende"????
Wollen wir nicht lieber mal die Ursache abstellen als auf drei verschiedene Arten dieses in den Brunnen gefallene Kiddie wieder hochzupäppeln?

Dann gibt sich ja bald gar keiner mehr Mühe, Logfiles brauchbar zu schreiben....

Grüße
Biber
Mitglied: thedog
thedog 22.08.2007 um 08:58:18 Uhr
Goto Top
Das Problem ist, dass ich das Logfile so bekomm. Wo und wie es generiert wird weiß ich nicht.
Und wegen Batch. Mir würde es so reichen. Aber wie vorgesetzte nunmal so sind haben sie extra wünsche. Mir wurde gestern nach der Vorstellung der Lösung gesagt: "Warum VBS, geht des nicht nur in Batch"
Ich bin soweit, dass ich die Leerzeichen am Zeilenende löschen kann. Aber wenn ein Leerzeichen irgendwo in der Zeilenmitte steht löscht des Skript alles ab da.
Mitglied: Biber
Biber 22.08.2007 um 20:52:46 Uhr
Goto Top
Moin thedog,

war ja durchaus nicht böse gemeint von mir - ist mir schon klar, dass es im Moment Dein Problem ist, dass diese Logdateien so -ich sage es mal hochdeutsch- fehlerhaft geschrieben werden.
Aber genau diesen Ball solltest Du zurückspielen an Deine Chefs.
Entweder die sagen: "Ey, is' ja eigentlich kein Fehler der Logdatei-schreibenden Software... ist eine liebenswerten Eigentümlichkeit, wegen der wir nicht meckern.."
---> Dann kannst Du sagen: "Okay, akzeptier' ich... und diese liebenswerte Eigentümlichkeit reiche ich Eins-zu-Eins weiter."
Oder die sagen: "Klar ist das ein Fehler, aber wir haben keine Rechte auf Fehlerbereinigung, weil das ein Freewaretool ist mit 'use on own risk'-Klausel".
---> Dann kannst Du wahrheitsgemäß berichten: "Okay, kein Problem, trailing blanks kann ich entfernen - entweder mit SED oder aber mit kiX/VBS... aber halt nicht ohne mögliche Seiteneffekte mit native Batch. Geht nicht ohne Stress - sacht sogar das admistrator-Forum.

Grüße
Biber
Mitglied: thedog
thedog 27.08.2007 um 10:12:36 Uhr
Goto Top
Hab es scho meinem lieben Herrn Chef weitergegeben. Er hat es prompt weitergegeben, an die nette Firma, die das für das Log verantworliche Tool geschrieben hatte. Die nette Firma, die an dieser Stelle nicht genannt werden möchte, hat nach immerhin 2 Tagen ( laut Abrechnung 7h ) diesen Fehler zu beseitigt.
Mein Chef hat herzlich gelacht, mir die Email gezeigt und die Rechnung nicht akzeptiert.
Inzwischen wurde die Rechnung beigelegt. Der BigBoss der anderen Firma war eben auf nen Kaffee bei uns hat sich mehrfach entschuldigt und deren Fehler eingestanden.
"Natürlich hätte nie eine Rechnung geschrieben werden dürfen, da die Ausgabe von ihnen nicht sauber programmiert wurde und wir uns ja zu recht beschwert hätten ...."
Trotzdem vielen vielen Dank an euch alle, die mir geholfen haben.
Mitglied: Biber
Biber 27.08.2007 um 10:50:49 Uhr
Goto Top
Moin thedog,

auch wenn Du es vielleicht schon geahnt haben magst: ich finde es so auch die mit Abstand beste Lösung.

Denn es ist verdammt schwergefallen, in meinem vorangegangenen Kommentar dieses logdatei-erzeugende Machwerk halbwegs unverfänglich als fehlerhaft geschrieben zu bezeichnen.
Bei uns in Bremen wurden noch vor wenigen Jahren derartige Lieferanten als Deichverstärkung genutzt, behaupten böse Zungen.

Na ja, ich könnte mir vorstellen, dass Du den gemeinsamen Kaffee mit dem Other-BigBoss ab-so-lut genossen hast. Jede einzelne Minute...*gg

Danke Dir für die Rückmeldung und ich schließe den Thread mal.

Grüße
Biber