Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Foreach Variable als Referenz beim Ersetzen von Daten in CSV

$
0
0

Hallo,

ich habe ein Problem beim Ändern von Daten in einer CSV Datei. Ich habe eine CSV Datendatei (Datafile.csv) und eine CSV Ersetzungstabelle (ConversationTable.csv), Aufbau s.u.. In der Datendatei sind in einigen Spalten ($csvconvfields) die Daten durch die in der Ersetzungstabelle enthaltenen Daten zu ersetzen, z.B. "1234" durch "a2b2". Falls es für die zu ersetzenden Daten keine Entsprechung in der Ersetzungstabelle gibt wird ein Standardwert geschrieben ($wrongdata).

Dazu lese ich die beiden CSV Dateien ein, durchsuche die Datendatei nach den zu bearbeitenden Spalten (erste foreach Schleife), hole jeweils die Daten der Spalten (zweite foreach Schleife) und ersetze diese durch die Ersetzungsdaten bzw. den Standardwert. Die ersetzten Daten sollten aber wieder in die  Datentabelle zurückgeschrieben werden. Das passiert nicht da die foreach Laufvariable ($fieldcont) keine Referenz auf die eigentlichen Datentabelle (in $csvcont.$csvfield) ist. Geht das überhaupt so? Habe ich einen grundsätzlichen Fehler im Lösungsansatz?

Beispiele für die CSV Dateien:

CSV Datendatei "Datafile.csv" enthält die Daten ähnlich:
    dfield1; dfield2; dfield3; dfield4; dfield5
     "wwwq";  "aasa";  "1244"; "wehet";  "1545"
     "wwwz"; "e4234";  "1433"; "wgget";      ""

CSV Ersetzungstabelle "ConversationTable.csv" enthält die Daten ähnlich:
     "SRC";  "DST"
    "1234"; "a2b2"
    "1433"; "a1b3"
    "1455"; "a2b2"
    "1545"; "ffef"

$csvconvfields  = @('dfield3','dfield5')
$wrongdata      = 'MISSED'

$csvmangletable = Import-Csv -Delimiter ';' "ConversationTable.csv"

$csvcont        = Import-Csv -Delimiter ';' "Datafile.csv"

foreach($csvfield in $csvconvfields) {
  foreach($fieldcont in $csvcont.$csvfield) {
    $oldcont = $fieldcont
    $fieldcont = $csvmangletable | Where-Object{ $_.SRC -eq $oldcont } | %{ $_.DST }
    if( $fieldcont.length -eq 0 ) {
      $fieldcont = $wrongdata
    }
    Write-Host $csvfield, ": ", $oldcont, " -> ", $fieldcont
  }  
}

$csvcont | Export-Csv "Datafile.csv" -Delimiter ';' -NoTypeInformation



Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>