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-Key: 7948564929

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

Printed on: December 6, 2023 at 05:12 o'clock

Mitglied: 7907292512
Solution 7907292512 Jul 25, 2023, updated at Jul 26, 2023 at 13:30:06 (UTC)
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
Member: TK1987
TK1987 Jul 25, 2023 updated at 15:08:35 (UTC)
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
Mitglied: 7907292512
7907292512 Jul 25, 2023 updated at 15:12:55 (UTC)
Goto Top
Stimmt, vollkommen vergessen face-smile.
Member: Springstil
Springstil Jul 26, 2023 at 12:40:26 (UTC)
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?
Mitglied: 7907292512
7907292512 Jul 26, 2023 updated at 12:54:31 (UTC)
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.
Member: Springstil
Springstil Jul 26, 2023 updated at 13:19:30 (UTC)
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
Mitglied: 7907292512
7907292512 Jul 26, 2023 updated at 13:30:37 (UTC)
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.