Spaltenwert einer CSV Datei ändern
Hallo,
ich frage mich, wie ich einen Spaltenwert einer CSV Datei ändern kann, wenn eine Bedingung X erfüllt ist. Hintergrund: Ich muss vor dem Import eines anderen Programmes prüfen, ob Werte einer Datenbanktabelle auch in der CSV sind, wenn nicht, soll ein String "IN" mit hinzugefügt werden.
Das Abprüfen, ob Wert von DB in CSV vorhanden ist klappt. Das Ändern dieser Spalte (Personal) von "12345" in "IN12345" ist mir fremd. Die Lösungsvorschläge im Netz sind nicht die, welche ich Abwandeln kann auf mein Beispiel.
Ich hoffe Ihr könnt mir helfen!
ich frage mich, wie ich einen Spaltenwert einer CSV Datei ändern kann, wenn eine Bedingung X erfüllt ist. Hintergrund: Ich muss vor dem Import eines anderen Programmes prüfen, ob Werte einer Datenbanktabelle auch in der CSV sind, wenn nicht, soll ein String "IN" mit hinzugefügt werden.
Das Abprüfen, ob Wert von DB in CSV vorhanden ist klappt. Das Ändern dieser Spalte (Personal) von "12345" in "IN12345" ist mir fremd. Die Lösungsvorschläge im Netz sind nicht die, welche ich Abwandeln kann auf mein Beispiel.
Ich hoffe Ihr könnt mir helfen!
### SQL Funktion erstellen
function querySQL {
Param(
[string]$cSQL
)
# Connectionstring aus m3.config
$connectionString = "...."
# SQL Verbindung aufbauen
$connection = New-Object system.data.SqlClient.SQLConnection($connectionString)
$command = New-Object system.data.sqlclient.sqlcommand($cSQL,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
# Tabelle erstellen
$adapter.Fill($dataSet) | Out-Null
$connection.Close()
$dataSet.Tables
}
$QueryPers="select Anw1 from kund_ba where isnull(Anw1,'') <>''"
$PersNr=(querySQL -cSQL $QueryPers).Anw1
$CSV_Path="C:\TEST2.csv"
$CSV=Import-Csv -Path $CSV_Path -Delimiter ";"
foreach($i in $CSV){
foreach($x in $PersNr){
if($x -eq $i.Personal){
Write-Host $x "aus DB passt zu" $i.Personal
#Wie kann nun $i.Personal zu "IN"+i.Personal in der CSV - TEST2.csv werden?
}
}
}
Danke vorab!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 562018
Url: https://administrator.de/contentid/562018
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
5 Kommentare
Neuester Kommentar
Zitat von @robdox:
Ok ich bin einen Schritt weiter. Jetzt werden aber alle Zeilen überschrieben mit einem Wert. Was mach ich falsch im Code?
Das geht alles viel kürzer:Ok ich bin einen Schritt weiter. Jetzt werden aber alle Zeilen überschrieben mit einem Wert. Was mach ich falsch im Code?
$CSV | Where-Object {$PersNr -match $_.Personal} | Foreach-Object {
$_.Personal='IN'+$_.Personal
}
$CSV | Export-CSV -Delimiter ';' -NoTypeInformation $CSV_Path
Ausgabe nun immer mit Header dazwischen, soll auch nicht sein
Du sollst die Ausgabe auch nicht schon in der Foreach-Schleife starten. Die Foreach-Schleife ändert nur deine $CSV-Variable, die gibst du anschließend in einem Rutsch aus - und natürlich mit Export-CSV. sowie Umhüllungszeichen für jedes Datenfeld.
Ist so bei Powershell, bei CSV-Dateien werden die Spalten immer in Double-Quotes ausgegeben. Entspricht aber auch den CSV-Formatvorgaben.Gruß Thomas