springstil
Goto Top

Durch PS erstellte Leerzeile entfernen bzw Verhindern

Hallo zusammen,

ich bearbeite eine CSV Datei mit Powershell. Ich muss die Trennzeichen ändern.

# Aktuelles Datum und Uhrzeit im Format 'yyyyMMddHHmmss' generieren 
$zeitstempel = Get-Date -Format 'yyyyMMddHHmmss'  

# Dateipfad zur CSV-Datei festlegen
$csvDatei = "S:\Bestandsupload\Channel21\Stock\Channel21.csv"  

# Neuen Dateinamen erstellen
$neuerDateiname = "S:\Bestandsupload\Channel21\Stock\channel21shop_gasper_"+$zeitstempel+"_Stock2.csv"  

# CSV-Datei einlesen und die Trennzeichen ändern
$inhalt = Get-Content -Path $csvDatei
$inhalt = $inhalt -replace ';', '|'  

# Inhalt in die neue Datei speichern
$inhalt | Set-Content -Path $neuerDateiname

# Ursprüngliche CSV-Datei löschen (optional)

#Remove-Item -Path $csvDatei

jetzt hab ich aber das Problem das er mir am ende eine leere zeile mit einfügt:
https://prnt.sc/DErWjcDcJzoj

ich kriege die aber ums verrecken nicht weg.. Hoffe mir kann dabei jemand helfen

Content-ID: 7948564929

Url: https://administrator.de/forum/durch-ps-erstellte-leerzeile-entfernen-bzw-verhindern-7948564929.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

7907292512
Lösung 7907292512 25.07.2023, aktualisiert am 26.07.2023 um 15:30:06 Uhr
Goto Top
Moin.
Parameter -NoNewline
(Get-Content -Path $csvDatei -Raw) -replace ';','|' -replace '\s+$' | Set-Content $neuerDateiname -NoNewline  
Oder
$inhalt = (Get-Content -Path $csvDatei -Raw) -replace ';', '|' -replace '\s+$'  
[IO.File]::WriteAllText($neuerDateiname,$inhalt)

Das so zu ersetzen ist aber nicht sicher denn die Trennezeichen können ja auch im Inhalt stehen. Besser so:
# Aktuelles Datum und Uhrzeit im Format 'yyyyMMddHHmmss' generieren  
$zeitstempel = Get-Date -Format 'yyyyMMddHHmmss'    

# Dateipfad zur CSV-Datei festlegen
$csvDatei = "S:\Bestandsupload\Channel21\Stock\Channel21.csv"    

# Neuen Dateinamen erstellen
$neuerDateiname = "S:\Bestandsupload\Channel21\Stock\channel21shop_gasper_${zeitstempel}_Stock2.csv"  

# CSV-Datei einlesen und die Trennzeichen ändern
$inhalt = (Import-CSV $csvDatei -Delimiter ";" | ConvertTo-CSV -Delimiter "|" -NoTypeInformation | out-string) -replace '\s+$'  
[IO.File]::WriteAllText($neuerDateiname,$inhalt)
Gruß siddius
TK1987
TK1987 25.07.2023 aktualisiert um 17:08:35 Uhr
Goto Top
Moin,

Zitat von @7907292512:
Ab Powershell 7 gibt es alternativ auch den Parameter -NoNewLine im CMDLet Set-Content
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
den gibt's in 5.1 auch schon. https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...

Gruß Thomas
7907292512
7907292512 25.07.2023 aktualisiert um 17:12:55 Uhr
Goto Top
Stimmt, vollkommen vergessen face-smile.
Springstil
Springstil 26.07.2023 um 14:40:26 Uhr
Goto Top
Danke für die Anhaltspunkte. Das klappt soweit, zumindest das er keine weitere zeile hinzufügt wenn es keine gibt. nun fällt mir aber auf das die Wawi diese zeile aber schon schreibt. Wie kriege ich die denn dann weg?
7907292512
7907292512 26.07.2023 aktualisiert um 14:54:31 Uhr
Goto Top
Zitat von @Springstil:

Danke für die Anhaltspunkte. Das klappt soweit, zumindest das er keine weitere zeile hinzufügt wenn es keine gibt. nun fällt mir aber auf das die Wawi diese zeile aber schon schreibt. Wie kriege ich die denn dann weg?
So
$inhalt = Get-Content -Path $csvDatei | select -Skiplast 1
bzw. gleich alle leeren entsorgen
$inhalt = Get-Content -Path $csvDatei | ?{$_ -notmatch '^\s*$'}  
Das wäre dir bei Nutzung der letzten Methode von oben nicht passiert.
Springstil
Springstil 26.07.2023 aktualisiert um 15:19:30 Uhr
Goto Top
Leider klappt das immer noch nicht :/ ich bin echt am verzweifeln

bei select -Skiplast 1 löscht er mir die zeile mit den daten
7907292512
7907292512 26.07.2023 aktualisiert um 15:30:37 Uhr
Goto Top
Zitat von @Springstil:

Leider klappt das immer noch nicht :/ ich bin echt am verzweifeln
bei select -Skiplast 1 löscht er mir die zeile mit den daten
Deswegen sagte ich ja nutze die letzte Variante von oben, da passiert das nicht, und die ist auch wasserdicht was Trenner innerhalb von Daten betrifft!
Habe die anderen Methoden daraufhin aber auch noch oben ergänzt.