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')
Cool. Nun kommen wir zum Advanced Thema.
Ersetzen von Umlauten in Text Dateien (*.txt)
Gegeben ist folgende Datei.
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:
Was mich zum letzten Teil dieses Beitrags bringt …
Ersetzen von Umlauten in Excel Dateien (*.csv)
Gegeben ist folgende Datei.
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:
Cool.
Bis zum nächsten Mal!
Categories: PowerShell