freshman2017
Goto Top

Leerzeichen am Ende (innerhalb) einer .txt Datei entfernen

Guten Abend,

ich habe da noch mal eine Frage; innerhalb einer .txt habe ich am Ende 1x Leerzeichen und dann ein carriage return (eingabetaste) stehen,
kann das über ein Batch File entfernt werden?

Beste Grüße!

Content-Key: 366796

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

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

Member: chesstiger
chesstiger Mar 02, 2018 at 23:34:37 (UTC)
Goto Top
Mit Batch alleine fällt mir so nichts (elegantes) ein. Mit diversen Skriptsprachen ist das ziemlich trivial lösbar. Als Beispiel will ich einfach mal AutoIt nennen.

Entweder macht man das dann, indem man in einer Schleife alle Zeilen durchgeht und das letzte Zeichen entfernt, falls es ein Leerzeichen ist.
Oder man nutzt einen eleganteren regulären Ausdruck. Könnte in AutoIt dann so aussehen, wobei der RegEx ungetestet ist:
$sContent = FileRead("myfile.txt")  
$sContent = StringRegExpReplace($sContent, "(?m)(.+?)\h+$", "\1")  
FileWrite("myfile.txt", $sContent)  
Member: falscher-sperrstatus
falscher-sperrstatus Mar 03, 2018 at 00:53:57 (UTC)
Goto Top
SetLocal EnableDelayedExpansion
set Params=%*
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b  
exit /b
?!
Member: Pedant
Pedant Mar 03, 2018 at 08:31:23 (UTC)
Goto Top
Hallo freshman2017,

wenn es nicht automatisch sein soll, sondern spontan, im Einzelfall und händisch, dann mach ich das mit Word.
Textdateiinhalt von notepad in eine leere Worddatei kopieren.
Leerzeichen^p ersetzen mit ^p.
Dann wieder zurück ins notepad in die Textdatei kopieren.

Gruß Frank
Member: falscher-sperrstatus
falscher-sperrstatus Mar 03, 2018 at 09:13:03 (UTC)
Goto Top
Dann kann er auch notepad++ nehmen...
Member: aqui
aqui Mar 03, 2018 at 11:56:54 (UTC)
Goto Top
Er sagt ja nicht für welches OS. Wenn er kein Winblows Knecht ist, ist awk das Mittel der Wahl:
https://www.heise.de/ct/ausgabe/2014-22-Textverarbeitung-auf-der-Kommand ...
Member: freshman2017
freshman2017 Mar 04, 2018 updated at 00:48:54 (UTC)
Goto Top
Danke für Eure Antworten. Hiebei hanfelt es sich um Windows.

Es handelt sich hier um eine .txt die mit Werten durch ; getrennt aus einem System kommt. Beim Export dieser Datei wird aus unerklärlichen Gründen ein Leerzeichen und ein Cariage Return (als ob die Eingabetaste gedrückt wird) eingefügt.

Da die Datei relativ groß ist, dachte ich dass es durch ein Batch Skript entfernt werden kann. Bspw. alles entfernen bis zum letzten ; .

Der Export sollte eigentlich nur mit einem ; enden und zusätzlich mit einer leertaste und eine cr.
Member: colinardo
Solution colinardo Mar 04, 2018 updated at 18:06:33 (UTC)
Goto Top
Servus freshman2017,
Ich denke mal es geht um deinen letzten Beitag. Wenn ja dann benutze beim Befehl (Set-Content /Alias sc) welcher deine Ausgabe generiert den Parameter -NoNewLine, denn per Default erzeugt Set-Content einen Zeilenumbruch. Mit dem Parameter wird das verhindert.

Hier im Kontxt deines letzten Threads
@echo off
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:Userprofile\Test\test.csv\" -Delimiter ';' | %%{@('K',$_.TEST5, $_.TEST4) -join ';' }) -join ';') + ";"  | sc \"$env:Userprofile\test\test.txt\" -NoNewLine"  
Dann kannst du nämlich das nachträgliche Ersetzen ad acta legen.

Grüße Uwe
Member: freshman2017
freshman2017 Mar 04, 2018 at 20:43:19 (UTC)
Goto Top
Moin colinardo,

genau das hatte ich gesucht, vielen Dank.

Ich habe den ursprünglichen Code nochmal umgebaut:

powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:USERPROFILE\TEST\test.csv\" -Delimiter ';' -Encoding Default) | %%{\"$('K');$($_.'Betrag');$('Ja');$($_.'Datum '.replace(' ',''));\"}) -join '' | set-content -NoNewLine \"$env:USERPROFILE\TEST\test.txt\""  

Kann ich hier zusätzlich dafür sorgen, dass die Zeile aus der .csv nur übernommen wird, wenn 'Betrag' größer 0 ist?
Member: colinardo
Solution colinardo Mar 04, 2018 at 21:01:49 (UTC)
Goto Top
Kannst du, indem du einfach ein where-object in die Pipeline legst:
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:USERPROFILE\TEST\test.csv\" -Delimiter ';' -Encoding Default) | ?{[Double]$_.Betrag -gt 0} | %%{\"$('K');$($_.'Betrag');$('Ja');$($_.'Datum '.replace(' ',''));\"}) -join '' | set-content -NoNewLine \"$env:USERPROFILE\TEST\test.txt\""