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

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

Printed on: April 24, 2024 at 10:04 o'clock

Mitglied: 114757
114757 Mar 12, 2015 updated at 17:45:20 (UTC)
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
Member: Marabunta
Marabunta Mar 13, 2015 at 08:06:59 (UTC)
Goto Top
jetzt habe ich alles in einer einzigen Zeile. So war das auch nicht gedacht...
Mitglied: 114757
114757 Mar 13, 2015 updated at 09:50:45 (UTC)
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.
Member: Marabunta
Marabunta Mar 13, 2015 at 14:19:20 (UTC)
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
Mitglied: 114757
114757 Mar 13, 2015 updated at 14:23:57 (UTC)
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.