marabunta
Goto Top

Powershell Zeile zu viel

Eine simple PS Datei die Mailadressen sortieren soll.
Inhalt testeingabe.txt:
"fe@eng.de  
few@
  giw@fiwej
jigw
gew@dar.com
ghio4@kl.de"  
Genau 6 Zeilen...

Die Ausgabe hat allerdings 7 Zeilen(leerzeile)
"fe@eng.de  
few@
gew@dar.com
ghio4@kl.de
giw@fiwej
jigw
"  

Wie behebe ich das?


$EingabePfad="C:\testeingabe.txt"  
$AusgabePfad="C:\testausgabe.txt"  

Function Eingabe{
if(Test-Path $EingabePfad)
{
$Global:EingabeDaten=Get-Content $EingabePfad
Write-Host "Eingaben eingelesen."  
}
else{
$Global:EingabePfad=Read-Host "Der Pfad ist nicht korrekt. Bitte neuen Pfad eingeben"  
Eingabe
}
}

Function Ausgabe{
if(Test-Path $AusgabePfad) # Loeschen der alten AusgabePfad, falls schon vorhanden.
{
Write-Host "Alte Ausgabedatei wird geloescht."  
    Remove-Item $AusgabePfad -Force
    sleep 1
    if(Test-Path $Ausgabepfad)
    {
    Write-Host "Ausgabedatei konnte nicht geloescht werden. Abbruch."  
    exit
    }
}
else{
Write-Host "Eine alte Ausgabedatei existiert nicht."  
}
Write-Host "Die Eingaben werden bearbeitet."  
<# Leerzeichen und doppelte Eintraege entfernen und nach Alphabet sortieren#>
$EingabeDaten -Split("\s","") |Sort-Object |Get-Unique |   
ForEach-Object{
    $Global:n=$n+1
    if($_ -ne "")  
    {
    $Global:i=$i+1
        Out-File -FilePath $AusgabePfad -Append -InputObject $_ -Encoding utf8 -Force # Anlegen der neuen AusgabePfad
        Write-Host "schreibe in Zeile $i : $_"  
    }
    else{
    Write-Host "Zeile nicht geschrieben i,n,Inhalt: $i , $n , $_"  
    }
}
if(Test-Path $AusgabePfad)
{
Write-Host "Fertig. Die Ausgabe befindet sich hier:"  
Write-Host "$AusgabePfad"  
Write-Host "Es wurden $n Zeilen aus der Eingabe bearbeitet."  
Write-Host "Es wurden $i Zeilen  in die Ausagbe geschrieben."  
}
else{
Write-Host "Keine Ausgabe erzeugt, bitte Eingaben, Pfade und Berechtigungen ueberpruefen."  
}
}

Eingabe
Ausgabe

Content-ID: 266075

Url: https://administrator.de/forum/powershell-zeile-zu-viel-266075.html

Ausgedruckt am: 03.04.2025 um 04:04 Uhr

114757
114757 12.03.2015 aktualisiert um 18:45:20 Uhr
Goto Top
Weil out-file -Append immer einen Zeilenumbruch am Ende der Zeile hinzufügt ;-,)
Folgende Methode tut das nicht ...
[io.file]::AppendAllText("C:\test.txt","DeinString")
und wieso
$EingabeDaten -Split("\s","")
??? Die Daten sind schon in einem Array wenn du sie mit gc lädst. Leerzeichen löschst du mit
$EingabeDaten -replace '\s',''
Also z.B. so
# datei laden
$content = gc C:\temp\daten.txt
# eventuelle Leerzeichen ersetzen
$content = $content -replace "\s",""  
# letzten Zeilenumbruch entfernen
$content = ($content | ?{$_ -ne ""} | out-string).TrimEnd("`r`n")  
# file schreiben
[io.file]::WriteAllText("C:\temp\daten2.txt",$content)  

# alternativ lässt sich der String auch so ohne Zeilenende schreiben
# Set-Content "C:\temp\daten2.txt" ([byte[]][char[]] $content) -Encoding Byte 
Gruß jodel32
Marabunta
Marabunta 13.03.2015 um 09:06:59 Uhr
Goto Top
jetzt habe ich alles in einer einzigen Zeile. So war das auch nicht gedacht...
114757
114757 13.03.2015 aktualisiert um 10:50:45 Uhr
Goto Top
Zitat von @Marabunta:

jetzt habe ich alles in einer einzigen Zeile. So war das auch nicht gedacht...
?? Du hast hier nicht vernünftig geschrieben ob deine Daten in der Quell-Datei alle jeweils in einer separaten Zeile stehen oder alle in einer Zeile. machst du deswegen das Split "\s" ??

Wenn man es richtig macht geht das damit einwandfrei. Da du aber deine Quelldaten hier nicht richtig formatiert hast (Code-Tags ) ist dir schwer zu helfen, leider immer wieder das selbe hier!
Wird Zeit das @Frank endlich mal was dran tut das die User hier endlich alle die Formatierungen nutzen.
Marabunta
Marabunta 13.03.2015 um 15:19:20 Uhr
Goto Top
dazu geschrieben hatte ich es bereits. Das eine hat 6 und das andere 7, nur die letzte leere die durch out-file -append erzeugt und leer ist soll weg
114757
114757 13.03.2015 aktualisiert um 15:23:57 Uhr
Goto Top
Zitat von @Marabunta:

dazu geschrieben hatte ich es bereits. Das eine hat 6 und das andere 7, nur die letzte leere die durch out-file -append erzeugt
und leer ist soll weg
Hatte ich oben geschrieben wie das geht.
Mit den CMDLets out-file / add-Content etc. kommst du nicht weit, weil diese immer einen abschließenden Zeilenumbruch hinzufügen !!! kannst du überall im Web nachlesen.. Die Lösung dazu steht oben !

Wenn du das nicht glauben willst, dein Problem.