String aus Spalte in csv auslesen und ersetzen
Hallo,
meine aktuelle Frage bezieht sich auf diese Frage von Dienstag.
Ich muss nun eine csv auslesen und dort in der Spalte Name alle Werte ersetzen. Ob dann ein Name(z.B. "Test1") oder einfache Werte(z.B. "AA11") rauskommen ist dabei egal. Mit Hilfe von exguru konnte ich folgenden Code basteln:
Die Schwierigkeit vor der ich stehe ist aktuell, zum Einen, dass die ersten drei Zeilen nach der Überschrift nicht randomized werden dürfen (daher meine esleif-Versuch) und zum Anderen, dass Characterweise eingelesen wird und ich nicht drauf komme wie ich stringweise Werte aus eine Spalte einlesen und replacen kann. Ich hatte die Idee mit regex '[A-Z]\|[a-z]\|" "\|"("\| ")"' zu arbeiten um das mit Characterweise auslesen trotzdem umzusetzen, klappt aber nicht.
Vielen Dank schonmal für eure Hilfe!
Grüße
mIsSteR
EDIT:
So sieht die CSV aus:
meine aktuelle Frage bezieht sich auf diese Frage von Dienstag.
Ich muss nun eine csv auslesen und dort in der Spalte Name alle Werte ersetzen. Ob dann ein Name(z.B. "Test1") oder einfache Werte(z.B. "AA11") rauskommen ist dabei egal. Mit Hilfe von exguru konnte ich folgenden Code basteln:
$file = 'C:\tmpcache\DWH_DIM_ORGUNIT.csv'
$colname = "NAME"
$csv = Import-CSV $file -Delimiter ";"
$csv | %{
$num = $_.$colname; $row = $_
$random = [regex]::replace($num,'.',{param($m) if ($m.Value -match '[A-Z]'){get-random -input "A","B","C","D" -setseed $m}elseif($row.Value -match '[1-4]'){get-random -input $m}})
$_ | gm -MemberType NoteProperty | ?{$row.($_.Name) -like "*$num*"} | %{$row.($_.Name) = $row.($_.Name) -replace $num,$random}
$row
} | export-csv $file -Delimiter ";" -NoType -Encoding UTF8
Die Schwierigkeit vor der ich stehe ist aktuell, zum Einen, dass die ersten drei Zeilen nach der Überschrift nicht randomized werden dürfen (daher meine esleif-Versuch) und zum Anderen, dass Characterweise eingelesen wird und ich nicht drauf komme wie ich stringweise Werte aus eine Spalte einlesen und replacen kann. Ich hatte die Idee mit regex '[A-Z]\|[a-z]\|" "\|"("\| ")"' zu arbeiten um das mit Characterweise auslesen trotzdem umzusetzen, klappt aber nicht.
Vielen Dank schonmal für eure Hilfe!
Grüße
mIsSteR
EDIT:
So sieht die CSV aus:
"ID";"PARENT";"NAME";"SHORT_NAME";"SPALTE5";"SPALTE6"
"Alle Orgunits";;"Alle Orgunits"
"Keine Konsolidierung";"Alle Orgunits";"Keine Gruppe";"Keine Gruppe"
"Keine Gruppe";"Keine Konsolidierung";"Keine Konsolidierung";"Keine Konsolidierung"
"0200001";"Keine Gruppe";"Firma A";"Firma A";"020";"0001";;
"0200002";"Keine Gruppe";"Firma A (alt)";"Firma A (alt)";"020";"0002";;
"0200003";"Keine Gruppe";"Firma B";"Firma B";"020";"0003"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 344758
Url: https://administrator.de/forum/string-aus-spalte-in-csv-auslesen-und-ersetzen-344758.html
Ausgedruckt am: 04.05.2025 um 13:05 Uhr
4 Kommentare
Neuester Kommentar

Dann empfehle ich dir erst mal einen Powershell Grundkurs.
Also werde dir selbst erst mal über die Funktionsweise der Zeilen klar.
Doku gibt's genug im Netz.
Also nicht verzagen sondern erst mal selbst sich die Funktionen erarbeiten und wenn dann noch was unklar ist fragen.
\+
Du willst + Zeichen ersetzen durch ABC oder D??? ?{$row.($_.Name) -like "*$num*"}
Und du suchst ja nicht nach Spalten die "Name" im Spaltennamen haben ...Also werde dir selbst erst mal über die Funktionsweise der Zeilen klar.
Doku gibt's genug im Netz.
Also nicht verzagen sondern erst mal selbst sich die Funktionen erarbeiten und wenn dann noch was unklar ist fragen.

Wenn der Random string egal ist, geht das alles doch viel einfacher:
Der RandomString stammt von Hier
Gruß
LotPings
$fileIn = '.\DWH_DIM_ORGUNIT.csv'
$fileOut = '.\DWH_DIM_ORGUNIT_new.csv'
$colname = "NAME"
Function RandomString {
$chars = [char[]]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Return ([string](($chars[0..25]|Get-Random)+(($chars|Get-Random -Count 9) -join "")))
}
$Csv = Import-Csv $fileIn -Delimiter ";"
ForEach ($Row in $Csv) {
IF ($Csv.IndexOf($Row) -ge 3) {
$Row."$colName" = RandomString
}
}
$Csv | Export-Csv $fileOut -Delimiter ";" -NoType -Encoding UTF8
Der RandomString stammt von Hier
Gruß
LotPings