PowerShell - div. Begriffe in einer CSV ersetzen
Hallo zusammen,
ich sitze gerade an einer Aufgabe und hoffe, dass ihr mir helfen könnt.
Ich möchte eine CSV durchsuchen und dort Begriffe durch IDs ersetzen (für einen Import in ein anderes System).
Einige Begriffe haben die selben IDs. Das Subsystem unterscheidet z.B. nicht nach Hard- & Software.
Folgenden Ansatz habe ich, dieser funktioniert auch soweit, allerdings habe ich im Orginal nicht nur 4 sondern 40 Begriffe, die ich ersetzen muss.
Und sobald ich eine Änderung habe, muss ich die Variablen und die if/else-Schleife anpassen. Das geht doch bestimmt besser/einfacher?
Kann ich vielleicht auch mit einer "Übersetzungtabelle" arbeiten?
Software Info = 10
Hardware Info = 10
Software Fehler = 50
Hardware Fehler = 50
Vielen Dank!
Euer Mickey
ich sitze gerade an einer Aufgabe und hoffe, dass ihr mir helfen könnt.
Ich möchte eine CSV durchsuchen und dort Begriffe durch IDs ersetzen (für einen Import in ein anderes System).
Einige Begriffe haben die selben IDs. Das Subsystem unterscheidet z.B. nicht nach Hard- & Software.
Folgenden Ansatz habe ich, dieser funktioniert auch soweit, allerdings habe ich im Orginal nicht nur 4 sondern 40 Begriffe, die ich ersetzen muss.
Und sobald ich eine Änderung habe, muss ich die Variablen und die if/else-Schleife anpassen. Das geht doch bestimmt besser/einfacher?
Kann ich vielleicht auch mit einer "Übersetzungtabelle" arbeiten?
Software Info = 10
Hardware Info = 10
Software Fehler = 50
Hardware Fehler = 50
$InputFile = "C:\Test\input.csv"
$OutputFile = "C:\Test\output.csv"
$Header = "Datum","Zeit","ID"
$Replace1 = "Software Info"
$Replace2 = "Hardware Info"
$Replace3 = "Software Fehler"
$Replace4 = "Hardware Fehler"
Import-Csv $InputFile -Delimiter ";" -header $Header | foreach {
if ($_.ID -eq $Replace1)
{ $IDnew = "10"
$_.Datum,$_.Zeit,$IDnew -join ';' | out-file $OutputFile -append }
elseif ($_.ID -eq $Replace2)
{ $IDnew = "10"
$_.Datum,$_.Zeit,$IDnew -join ';' | out-file $OutputFile -append }
elseif ($_.ID -eq $Replace3)
{ $IDnew = "50"
$_.Datum,$_.Zeit,$IDnew -join ';' | out-file $OutputFile -append }
elseif ($_.ID -eq $Replace4)
{ $IDnew = "50"
$_.Datum,$_.Zeit,$IDnew -join ';' | out-file $OutputFile -append }
}
Vielen Dank!
Euer Mickey
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 464795
Url: https://administrator.de/forum/powershell-div-begriffe-in-einer-csv-ersetzen-464795.html
Ausgedruckt am: 13.06.2025 um 02:06 Uhr
4 Kommentare
Neuester Kommentar
Moin,
neeeeee, viel zu kompliziert. Ich würde das als Ansatz so lösen:
1. Aus der Ersetzungstabelle ein Objekt machen:
Das kann man sicherlich auch eleganter mit z. B. einer einzulesenden Textdatei und einer Schleife erledigen, so dass man die Einträge leichter pflegen kann.
Mit dem Objekt kannst Du nun die Ersetzungen in einem Schritt vornehmen:
BTW: Nimm in Skripten nicht die Pipe auf foreach-object, sondern die Schleife foreach. Letzteres ist deutlich schneller.
hth
Erik
neeeeee, viel zu kompliziert. Ich würde das als Ansatz so lösen:
1. Aus der Ersetzungstabelle ein Objekt machen:
$replace = new-object PSObject
$replace | add-member -NotePropertyName "Software Info" -NotePropertyValue 10
$replace | add-member -NotePropertyName "Hardware Info" -NotePropertyValue 10
$replace | add-member -NotePropertyName "Software Fehler" -NotePropertyValue 50
...
Das kann man sicherlich auch eleganter mit z. B. einer einzulesenden Textdatei und einer Schleife erledigen, so dass man die Einträge leichter pflegen kann.
Mit dem Objekt kannst Du nun die Ersetzungen in einem Schritt vornehmen:
$data = Import-Csv $InputFile -Delimiter ";" -header $Header
foreach($dataset in $data) {
$dataset.id = $replace.($dataset.id) #ob das so geht, musst Du ausprobieren. Evtl. muss $data.id vorher noch in eine Variable geschrieben werden.
}
BTW: Nimm in Skripten nicht die Pipe auf foreach-object, sondern die Schleife foreach. Letzteres ist deutlich schneller.
hth
Erik
Nochmal komplett und getestet:
$replace = new-object PSObject
$replace | add-member -NotePropertyName "Software Info" -NotePropertyValue 10
$replace | add-member -NotePropertyName "Hardware Info" -NotePropertyValue 10
$replace | add-member -NotePropertyName "Software Fehler" -NotePropertyValue 50
$replace | add-member -NotePropertyName "Hardware Fehler" -NotePropertyValue 50
$data = Import-Csv $input -Delimiter ";"
foreach($dataset in $data) {
$dataset.id = $replace.($dataset.id) #funktioniert!
}
$data | Export-Csv $output -delimiter ";" -NoTypeInformation