ricardobohner
Goto Top

Einfachen weg in Powershell Datum von zu formatieren

Hallo Leute,

Habe folgende csv datei:

Name; Nachname; Email; Sex; Geburtsdatum; Beruf;
Robson; Ramalho; robson.ramalho@tech.com; M;04091981; Freelancer;
Ricardo; Bohner; ricardobohner@network.com; M;03061979; Gärtner;
Sabrina; Sato; sabrinasato@gmail.com; W; 04021981; Host;
Papai; Noel; papainoel@polonorte.com;M ; 06091920; Weihnachtsman;

Gibt es in powershell einen einfachen weg das Geburtsdatum von 03041981 zu 03/04/1981 formatieren.

Also was ich gern hätte währe so was:

Name; Nachname; Email; Sex; Geburtsdatum; Beruf;
Robson; Ramalho; robson.ramalho@tech.com; M;04/09/1981; Freelancer;
Ricardo; Bohner; ricardobohner@network.com; M;03/06/1979; Gärtner;
Sabrina; Sato; sabrinasato@gmail.com; W; 04/02/1981; Host;
Papai; Noel; papainoel@polonorte.com;M ; 06/09/1920; Weihnachtsman;

Content-ID: 564056

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

Ausgedruckt am: 07.11.2024 um 22:11 Uhr

143728
143728 10.04.2020 aktualisiert um 15:04:45 Uhr
Goto Top
Joa, z.B. mit ParseExact wenn man es als echtes Datum umwandeln möchte
$csv = Import-Csv 'd:\datei.csv' -delimiter ";"  
$csv | %{$_.Geburtsdatum = [datetime]::parseExact($_.Geburtsdatum,'ddMMyyyy',[cultureinfo]::InvariantCulture).toString('dd/MM/yyyy',[cultureinfo]::InvariantCulture)}  
$csv | export-csv 'd:\datei_neu.csv' -delimiter ";" -NoType -Encoding UTF8  
oder auch mit nem einfachen Regex String replace
$csv = Import-Csv 'd:\datei.csv' -delimiter ";"  
$csv | %{$_.Geburtsdatum = $_.Geburtsdatum -replace '(\d{2})(\d{2})(\d{4})','$1/$2/$3'}  
$csv | export-csv 'd:\datei_neu.csv' -delimiter ";" -NoType -Encoding UTF8  
ricardobohner
ricardobohner 10.04.2020 um 12:57:28 Uhr
Goto Top
Hallo Cabrinha,

Wenn ich in der Originaltabele " Geburtsdatum" in "Geburtsdatum" umbenenne funktioniert es. Kann man es irgendwie umschreiben das es das Leerzeichen auf der linken seite anerkennt?

Und wenn der text in einer anderen Sprache währe zum beispiel Portuguisisch (Brasilien) weisst du was ich in dem culturinfo teil eingeben müste.

Vielen dank.
erro1
143728
143728 10.04.2020 aktualisiert um 16:32:08 Uhr
Goto Top
Zitat von @ricardobohner:

Hallo Cabrinha,

Wenn ich in der Originaltabele " Geburtsdatum" in "Geburtsdatum" umbenenne funktioniert es. Kann man es irgendwie umschreiben das es das Leerzeichen auf der linken seite anerkennt?
Das geschieht automatisch dazu ist keine weitere Aktion nötig, weil die Powershell automatisch führende Leerzeichen entfernt! Guckst du hier das Beispiel
https://tio.run/##jZDdSsNAEIXv8xSDKFXQ2qqodRGCxb@LiFjQCxGZbkazmOyG2UlV1L ...

Du solltest stattdessen deine PS updaten. Sollten da tatsächlich Eigenschaften mit Leerzeichen erkannt worden sein spricht man diese z.B. so an
$_.' Geburtsdatum'  

Und wenn der text in einer anderen Sprache währe zum beispiel Portuguisisch (Brasilien) weisst du was ich in dem culturinfo teil eingeben müste.
Brauchst du nicht, die Culture ist in dem Fall irrelevant, da hier englische Formatbezeichner benutzt werden, würdest du im Format-String portugiesische verwenden dann wäre es nötig, so aber nicht.
Falls du es trotzdem wissen willst [cultureinfo]::GetCultureInfo('pt-BR')
ricardobohner
ricardobohner 10.04.2020 um 17:50:45 Uhr
Goto Top
Also in wirklichkeit sieht meine Tabele so aus die andere hatte ich nur so ins Deutsche übersetzt:

Nome; Sobrenome; Email; Sexo; Aniversário; Profissão;
Robson; Ramalho; robson.ramalho@tech.com; M;04091981; Freelancer;
Ricardo; Bohner; ricardobohner@hotmail.com; M;03061979; Intérprete;
Sabrina; Sato; sabrinasato@gmail.com; F; 04021981; Apresentadora;
Papai; Noel; papainoel@polonorte.com;M ; 06091920; Papai Noel;

Die Säule mit den Gebutsdaten die ich formatieren muss heisst: Aniversário. Der erste powershell code den du mir geschickt hast funktioniert aber nur wenn ich "Aniversário" in "Aniversario" umbennene. Alle felder bekommen Anführungsstrichen die Leerzeichen gehen verloren und die Felder die Portuguisische Aktzenzeichen haben werden mit felhern wiedergegeben:

Powershell code:
$csv = Import-Csv 'bd.csv' -delimiter ";"  
$csv | %{$_.Aniversario = [datetime]::parseExact($_.Aniversario,'ddMMyyyy',[cultureinfo]::GetCultureInfo('pt-BR')).toString('dd/MM/yyyy')}  
$csv | export-csv 'datei_neu.csv' -delimiter ";" -NoType -Encoding UTF8  

Ergebnis:
"Nome";"Sobrenome";"Email";"Sexo";"Aniversario";"Profiss�o"  
"Robson";"Ramalho";"robson.ramalho@tech.com";"M";"04/09/1981";"Freelancer"  
"Ricardo";"Bohner";"ricardobohner@hotmail.com";"M";"03/06/1979";"Int�rprete"  
"Sabrina";"Sato";"sabrinasato@gmail.com";"F";"04/02/1981";"Apresentadora"  
"Papai";"Noel";"papainoel@polonorte.com";"M ";"06/09/1920";"Papai Noel"  
143728
Lösung 143728 10.04.2020 aktualisiert um 18:18:13 Uhr
Goto Top
Du musst ja auch das Encoding entsprechend beim Import an das deiner Datei anpassen wenn es nicht dem Standard entspricht!

Hier als bsp. für das Default-Encoding, oder eben UTF8, Unicode usw. Was möglich ist zeigt dir die ISE in der Intellisense...
$csv = Import-Csv 'bd.csv' -delimiter ";" -Encoding Default  
Das zum Thema RTFM, dachte das wäre zumindest bekannt, aber naja is ja schon wieder Freitag face-wink.

Alle felder bekommen Anführungsstrichen die Leerzeichen gehen verloren
Das ist kein Problem das entspricht den CSV Konventionen, so ist es sogar besser weil sonst Semikolons im Text zu Fehlern führen würden.

Aber auch das geht wenn du unbedingt willst
https://tio.run/##jVDBTttAFLz7K56iIAcpCQlFlLBCMk2JxMEIkaoXVKEX@4FXWu@z3i ...

Oder eben plain mit einem regex Replace
https://tio.run/##TVDBSsNAEL3vV@whEAvaJmmphkVIBQseWoq9etmko1nY7ITZpQrSjx ...
ricardobohner
ricardobohner 10.04.2020 um 18:54:06 Uhr
Goto Top
Ok,
Werde versuchen das hinzukriegen mit den infos die du mir gegeben hast,
Vielen dank.