Benutzer mit den meisten Antworten
convertfrom-string template, Verständnisfrage

Frage
-
convertfrom-string müsste ja ideal zum Bereinigen von Dateien für das leidige Word Serienbrief Thema mit schlechte Adressdateien mit und ohne Titel sein?
Musterdatei:
Name;Vorname
Dr. Max; Mustermann
Hans; Mustermann
Mag. Susi; Musterfrauwas ist hier falsche
wofür benötigt man den STERN?
$template = @' {titel:Dr.}{vorname*:meinvorname};{name:meinname} {titel:}{vorname*:deinvorname};{name:deinname} '@ Get-Content C:\temp\test.txt | ConvertFrom-String -TemplateContent $template
ConvertFrom-String : Die angegebene Vorlage ist ungültig: Es gibt zwei Instanzen der nicht sequenziellen Eingeschaft 'titel' unter 'Zeile '1', Spalte '2'' und 'Zeile
'2', Spalte '2'' in der übergeordneten Spanne ''root''.. Um weitere Informationen zur Vorlagensyntax zu erhalten, geben Sie 'Get-Help ConvertFrom-String' ein.
$template = @' {titel:Dr.} {vorname*:meinvorname};{name:meinname} {vorname*:deinvorname};{name:deinname} '@ Get-Content C:\temp\test.txt | ConvertFrom-String -TemplateContent $template
vorname name
------- ----
Name Vorname
- Bearbeitet Dont - Worry Sonntag, 18. Oktober 2020 17:26
Antworten
-
Wenn ich das cmdlet und die Erklärung von Dr. Tobi und Deine Beispiel-Daten richtig verstanden habe, sind Deine Beispieldaten nicht gut geeignet und auch zu wenig. Schau Dir mal dieses Video an: Weltner Sophisitcated Techniques of Plain Text Parsing
In Deinen Beispiel-Daten fängt ein neuer Datensatz mit einem Titel an, der aber nicht in allen Datensätzen vorhanden ist. Du musst aber das erste Feld des Datensatzes mit einem Stern markieren. Du hast aber nicht in allen Datensätzen einen Titel am Anfang. Vielleicht gibt es dafür auch noch eine Lösung aber so isses erstmal ein Anfang, glaube ich. :-)
Hier ein Beispiel mit ein paar mehr Daten:
$data = @' VorName;Name Dr. Max; Mustermann Hans; Mustermann Mag. Susi; Musterfrau Dipl.Ing. Rudi; Ratlos B. A. Fritz; Furz Hinz; Fischer B. Sc. Rolf; Rammler Dipl.Ing. Ralf; Ratlos '@ $template = @' {vorname*:Dr. Max}; {nachname:Mustermann} {vorname*:Hans}; {nachname:Mustermann} {vorname*:Mag. Susi}; {nachname:Musterfrau} {vorname*:Dipl.Ing. Rudi}; {nachname:Ratlos} {vorname*:B. A. Fritz}; {nachname:Furz} '@ $data | ConvertFrom-String -TemplateContent $template -OutVariable output
Das Ergebnis sieht dann bei mir so aus:
vorname nachname ------- -------- VorName Name Dr. Max Mustermann Hans Mustermann Mag. Susi Musterfrau Dipl.Ing. Rudi Ratlos B. A. Fritz Furz Hinz Fischer B. Sc. Rolf Rammler Dipl.Ing. Ralf Ratlos
Viel Spaß! ;-)
Edit:
Du kannst ja einen weiteren Verarbeitungsschritt dranhängen, wo Du den Titel vom Vornamen trennst ...
$output | ForEach-Object { $_.vorname -match '^(\w+\..*\s+)*(\w+)$' | Out-Null [PSCustomObject]@{ titel = if ($Matches.count -gt 2 ) { $Matches[1] }else {''} vorname = $Matches[2] nachname = $_.nachname } }
Die Ausgabe sieht dann so aus:
titel vorname nachname ----- ------- -------- VorName Name Dr. Max Mustermann Hans Mustermann Mag. Susi Musterfrau Dipl.Ing. Rudi Ratlos B. A. Fritz Furz Hinz Fischer B. Sc. Rolf Rammler Dipl.Ing. Ralf Ratlos
... to be continued ... ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Mittwoch, 21. Oktober 2020 01:53
- Als Antwort vorgeschlagen Vector BCO Mittwoch, 21. Oktober 2020 07:16
- Als Antwort markiert Dont - Worry Mittwoch, 21. Oktober 2020 10:50
Alle Antworten
-
Moin,
ich muss mich jetzt mal outen: Ich habe es noch nie geschafft, ConvertFrom-String sinnvoll einzusetzen.
Evgenij Smirnov
- Als Antwort markiert Dont - Worry Montag, 19. Oktober 2020 08:26
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Mittwoch, 21. Oktober 2020 23:36
-
Wenn ich das cmdlet und die Erklärung von Dr. Tobi und Deine Beispiel-Daten richtig verstanden habe, sind Deine Beispieldaten nicht gut geeignet und auch zu wenig. Schau Dir mal dieses Video an: Weltner Sophisitcated Techniques of Plain Text Parsing
In Deinen Beispiel-Daten fängt ein neuer Datensatz mit einem Titel an, der aber nicht in allen Datensätzen vorhanden ist. Du musst aber das erste Feld des Datensatzes mit einem Stern markieren. Du hast aber nicht in allen Datensätzen einen Titel am Anfang. Vielleicht gibt es dafür auch noch eine Lösung aber so isses erstmal ein Anfang, glaube ich. :-)
Hier ein Beispiel mit ein paar mehr Daten:
$data = @' VorName;Name Dr. Max; Mustermann Hans; Mustermann Mag. Susi; Musterfrau Dipl.Ing. Rudi; Ratlos B. A. Fritz; Furz Hinz; Fischer B. Sc. Rolf; Rammler Dipl.Ing. Ralf; Ratlos '@ $template = @' {vorname*:Dr. Max}; {nachname:Mustermann} {vorname*:Hans}; {nachname:Mustermann} {vorname*:Mag. Susi}; {nachname:Musterfrau} {vorname*:Dipl.Ing. Rudi}; {nachname:Ratlos} {vorname*:B. A. Fritz}; {nachname:Furz} '@ $data | ConvertFrom-String -TemplateContent $template -OutVariable output
Das Ergebnis sieht dann bei mir so aus:
vorname nachname ------- -------- VorName Name Dr. Max Mustermann Hans Mustermann Mag. Susi Musterfrau Dipl.Ing. Rudi Ratlos B. A. Fritz Furz Hinz Fischer B. Sc. Rolf Rammler Dipl.Ing. Ralf Ratlos
Viel Spaß! ;-)
Edit:
Du kannst ja einen weiteren Verarbeitungsschritt dranhängen, wo Du den Titel vom Vornamen trennst ...
$output | ForEach-Object { $_.vorname -match '^(\w+\..*\s+)*(\w+)$' | Out-Null [PSCustomObject]@{ titel = if ($Matches.count -gt 2 ) { $Matches[1] }else {''} vorname = $Matches[2] nachname = $_.nachname } }
Die Ausgabe sieht dann so aus:
titel vorname nachname ----- ------- -------- VorName Name Dr. Max Mustermann Hans Mustermann Mag. Susi Musterfrau Dipl.Ing. Rudi Ratlos B. A. Fritz Furz Hinz Fischer B. Sc. Rolf Rammler Dipl.Ing. Ralf Ratlos
... to be continued ... ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Mittwoch, 21. Oktober 2020 01:53
- Als Antwort vorgeschlagen Vector BCO Mittwoch, 21. Oktober 2020 07:16
- Als Antwort markiert Dont - Worry Mittwoch, 21. Oktober 2020 10:50