PowerShell

PowerShell: Umlaute in Text, Excel und CSV Dateien entfernen und ersetzen

Dieser Blog Post ist wieder mal in Deutsch. Warum? Weil es um Umlaute der deutschen Sprache geht. Umlaute haben in der Informatik wenig zu suchen und machen auch deshalb Probleme beim Import von Daten aus anderen Datenquellen. In diesem Blogbeitrag zeige ich wie man Umlaute aus Textdateien und Excel bzw. CSV Dateien entfernt und umwandelt. Let’s jump in.

PowerShell ISE oder Visual Studio Code starten nicht vergessen. 😉

Der Basis-Code

Hier ist der Basis Code um Umlaute von einem String umzuwandeln. Verwendet wird die ().replace Methode in PowerShell.


$a = 'Ästher Österrücher'

$a.Replace('ä','ae').Replace('Ä','Ae').Replace('ö','oe').Replace('Ö','Oe').Replace('ü','ue').Replace('Ü','Ue')

Anmerkung 2020-06-09 171937

Cool. Nun kommen wir zum Advanced Thema.

Ersetzen von Umlauten in Text Dateien (*.txt)

Gegeben ist folgende Datei.

Anmerkung 2020-06-09 172136

Der folgende Code wandelt alle Umlaute um und speichert das Ergebnis in einer neuen Datei im Profil des Benutzers.


$c = Get-Content $home\usernames.txt

Foreach ($i in $c) {

$newname = $i.Replace('ä','ae').Replace('Ä','Ae').Replace('ö','oe').Replace('Ö','Oe').Replace('ü','ue').Replace('Ü','Ue')

Add-Content -Path $home\usernamescorrected.txt -Value $newname

}

Ergebnis sieht so aus:

Anmerkung 2020-06-09 172335

Was mich zum letzten Teil dieses Beitrags bringt …

Ersetzen von Umlauten in Excel Dateien (*.csv)

Gegeben ist folgende Datei.

Anmerkung 2020-06-09 172612

Nun zum Code, welcher wieder alles ersetzt und die Ausgabe ein einer neuen Datei output.csv im Benutzerprofil speichert, auch solche Datensätze, die keine Umlaute aufweisen.


### Convert data in csv files

# Get data from original file with Umlaute

$originalfile = "$home\Umlaute_1.csv"

$csv = Import-Csv $originalfile -Delimiter ';'

# Create new csv file with headers

Add-Content -Path $home\output.csv -Value "Vorname;Nachname"

# Loop over each item to remove Umlaute and add content to newly created file

foreach ($c in $csv) {

If ($c -match '[ö,ü,ä,Ä,Ö,Ü]') {

$given = $c.vorname.Replace('ä','ae').Replace('Ä','Ae').Replace('ö','oe').Replace('Ö','Oe').Replace('ü','ue').Replace('Ü','Ue')
$sur = $c.nachname.Replace('ä','ae').Replace('Ä','Ae').Replace('ö','oe').Replace('Ö','Oe').Replace('ü','ue').Replace('Ü','Ue')

$full = "$given;$sur"

$full | foreach {Add-Content -Path $home\output.csv -Value $_}

}

else {

$fullc = "$($c.Vorname);$($c.Nachname)"

$fullc | ForEach-Object {Add-Content -Path $home\output.csv -Value $_}
}
}

Was dann so aussieht:

Anmerkung 2020-06-09 172922

Cool.

Bis zum nächsten Mal!

 

Categories: PowerShell

Tagged as: ,

4 replies »

  1. Hallo,

    ich hätte eine kurze Frage, ist es auch möglich Ordner damit zu ändern? Habe nämlich ein foreach auf Subfolder und möchte dort die Umlaute entfernen / ersetzen. Nach dem o.g. Methode. Funktioniert jedoch leider nicht.
    Hier mein Beispiel:

    $sourcePath = …
    $source = Get-ChildItem $sourcePath – Directory

    foreach ($s in $source) {
    $name = $s.name
    $newName = $name.Replace(‘ä’,’ae’).Replace(‘Ä’,’Ae’).Replace(‘ö’,’oe’).Replace(‘Ö’,’Oe’).Replace(‘ü’,’ue’).Replace(‘Ü’,’Ue’)

    Rename-Item … …
    }

    Wenn ich nach dem Replace $newName ausgebe, steht das Gleiche drin wie vorher auch. Habe auch schon statt $s.Name mal $s.Basename versucht, gleiches Ergebnis.

    Like

  2. Hallo,
    kurze Frage, wie würde das bei Ordnern funktionieren? Habe eine foreach Schleife auf einen Ordner und möchte alle Umlaute der Unterordner ersätzen, funktioniert leider aber nicht.
    Beispiel:
    $sourcePath = ….
    $source = Get-ChildItem $sourcePath -Directory
    foreach ($s in $source) {
    $name = $s.Name
    $newName = $name.Replace(‘ä’,’ae’).Replace(‘Ä’,’Ae’).Replace(‘ö’,’oe’).Replace(‘Ö’,’Oe’).Replace(‘ü’,’ue’).Replace(‘Ü’,’Ue’)

    Rename-Item ….
    }
    Jemand eine Idee wie?

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.