compu2000
Goto Top

CSV anpassen aufgrund Spaltenformat

Hallo, ich würde mal wieder Euer Schwarmwissen benötigen.

Ich habe eine CSV mit folgenden Inhalt:

Max;Muster;Musterstraße 2;Musterhausen;
Erika;Musterfrau;123 A-F Musterweg;Musterhausen;

Jetzt würde ich gerne im Output anhand der 2. Spalte die Straße und die Hausnummer trennen:

Max;Muster;Musterstraße;2;Musterhausen;
Erika;Musterfrau;Musterweg;123 A-F;Musterhausen;

Ist sowas mit Batch oder Powershell möglich?

Beste Grüße!

Content-Key: 666999

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

Printed on: April 18, 2024 at 04:04 o'clock

Mitglied: 148121
148121 May 22, 2021 updated at 15:33:03 (UTC)
Goto Top
tio.run

Frohe Pfingsten
Gruß w.
Member: compu2000
compu2000 May 22, 2021 at 19:52:19 (UTC)
Goto Top
Vielen lieben Dank zu Pfingsten!

Kannst Du mir vielleicht kurz erklären, was im Code genau passiert?

Beste Grüße!
Mitglied: 148121
148121 May 23, 2021 updated at 06:15:30 (UTC)
Goto Top
Importiere CSV Datei mit definierten Headern (CSV Datei fehlen die Überschriften)
$csv = ipcsv test.csv -delimiter ';' -header 'Vorname','Nachname','Straße','Ort'
Füge dem CSV Object eine weitere Property (Spalte 'Hausnummer') hinzu
$csv | Add-Member -Membertype Noteproperty -Name 'Hausnummer' -Value ''
Für jede Zeile der CSV führe folgende Schritte innerhalb der geschweiften Klammer (Foreach-Object) durch
$csv | %{
Führe einen Regular Expression Match auf die Straße aus, welcher Hausnummer und Straße in Submatches aufteilt
if ($_.Straße -match '((?<hnr>\d+([a-z]| [a-z]-[a-z]))(?<str>.*))|(?<str>[^\d]+)(?<hnr>.*)'){
Wenn Match erfolgreich setze den Inhalt der Spalten auf die Regex Submatches für Hausnummer und Straße ($matches ist eine Vordefinierte Powershell Variable die immer deie Ergebnisse des letzten durchgeführten Regex Match via -match enthält)
$_.Straße = $matches['str'].trim()
$_.Hausnummer = $matches['hnr'].trim()
}
}
Exportiere das modifizierte CSV Objekt wieder in eine neue CSV Datei
$csv | select Vorname,Nachname,Straße,Hausnummer,Ort | epcsv test_neu.csv -delimiter ';' -NoType -Encoding UTF8