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

Printed on: April 20, 2024 at 15:04 o'clock

Member: paulepank
paulepank Aug 21, 2007 at 09:12:29 (UTC)
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
Member: thedog
thedog Aug 21, 2007 at 09:31:15 (UTC)
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.
Member: paulepank
paulepank Aug 21, 2007 at 09:44:43 (UTC)
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
Member: bastla
bastla Aug 21, 2007 at 09:55:35 (UTC)
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]
Member: thedog
thedog Aug 21, 2007 at 09:58:22 (UTC)
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)
Member: paulepank
paulepank Aug 21, 2007 at 10:10:53 (UTC)
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
Member: bastla
bastla Aug 21, 2007 at 10:14:32 (UTC)
Goto Top
Hallo thedog!

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

Grüße
bastla
Member: bastla
bastla Aug 21, 2007 at 10:38:23 (UTC)
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
Member: thedog
thedog Aug 21, 2007 at 11:27:33 (UTC)
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.
Member: bastla
bastla Aug 21, 2007 at 19:02:46 (UTC)
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
Member: Biber
Biber Aug 22, 2007 at 01:13:15 (UTC)
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
Member: thedog
thedog Aug 22, 2007 at 06:58:18 (UTC)
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.
Member: Biber
Biber Aug 22, 2007 at 18:52:46 (UTC)
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
Member: thedog
thedog Aug 27, 2007 at 08:12:36 (UTC)
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.
Member: Biber
Biber Aug 27, 2007 at 08:50:49 (UTC)
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