Bestimmte Spalte einer CSV-Datei bearbeiten und in neuer CSV-Datei speichern
Hallo zusammen,
In einer CSV-Datei sind Artikelnummern und Lagerbestände gespeichert. Die Datei hat folgenden Aufbau:
Artikelnummer; Lagerbestand;
123456-0001;10000
123457-0001;5
Nun soll diese CSV-Datei automatisiert bearbeitet werden, sodass die neue Datei den gleichen Aufbau hat, aber dass lediglich der Lagerbestand nur 10% des vorherigen Lagerbestands beträgt.
Eventuelle Dezimalzahlen sollen dabei stets auf die nächste volle Zahl aufgerundet werden. Mein Ansatz ist folgender:
$IMPORT = Import-Csv "C:\Users\Benutzer\desktop\testcsv.csv" -Delimiter ";"
ForEach-Object
{
[math]::Ceiling(0.1 * ($CsvObject.'Lagerbestand')).replace(',','.')
}
Export-CSV -path "C:\Users\Benutzer\desktop\testcsv2.csv" -Delimiter ";" -InputObject "$IMPORT"
Leider funktioniert das nicht. Kann mir jemand weiterhelfen?
In einer CSV-Datei sind Artikelnummern und Lagerbestände gespeichert. Die Datei hat folgenden Aufbau:
Artikelnummer; Lagerbestand;
123456-0001;10000
123457-0001;5
Nun soll diese CSV-Datei automatisiert bearbeitet werden, sodass die neue Datei den gleichen Aufbau hat, aber dass lediglich der Lagerbestand nur 10% des vorherigen Lagerbestands beträgt.
Eventuelle Dezimalzahlen sollen dabei stets auf die nächste volle Zahl aufgerundet werden. Mein Ansatz ist folgender:
$IMPORT = Import-Csv "C:\Users\Benutzer\desktop\testcsv.csv" -Delimiter ";"
ForEach-Object
{
[math]::Ceiling(0.1 * ($CsvObject.'Lagerbestand')).replace(',','.')
}
Export-CSV -path "C:\Users\Benutzer\desktop\testcsv2.csv" -Delimiter ";" -InputObject "$IMPORT"
Leider funktioniert das nicht. Kann mir jemand weiterhelfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 568112
Url: https://administrator.de/forum/bestimmte-spalte-einer-csv-datei-bearbeiten-und-in-neuer-csv-datei-speichern-568112.html
Ausgedruckt am: 08.04.2025 um 04:04 Uhr
19 Kommentare
Neuester Kommentar
Moin,
erstmal: Bitte mache um Deinen Quellcode < code> und </ code> (ohne Leerzeichen).
So sollte es gehen. Ich habe es nicht getestet. Zur Erläuterung:
Du importierst nach $IMPORT das CSV und benutzt es dann in der ForEach-Schleife nicht. Entweder pipest Du gleich Import-CSV auf foreach-object oder Du speicherst das in einem Array und verarbeitest dieses in einer ForEach-Schleife.
Außerdem musst Du auch noch angeben, dass das Ergebnis Deiner Berechnung auch wieder in der entsprechenden Eigenschaft des Objekts gespeichert wird.
hth
Erik
erstmal: Bitte mache um Deinen Quellcode < code> und </ code> (ohne Leerzeichen).
$IMPORT = Import-Csv "C:\Users\Benutzer\desktop\testcsv.csv" -Delimiter ";"
ForEach($csvObject in $IMPORT) {
$csvObject.Lagerbstand = [math]::Ceiling(0.1 * ($CsvObject.'Lagerbestand')).replace(',','.')
}
Export-CSV -path "C:\Users\Benutzer\desktop\testcsv2.csv" -Delimiter ";" -InputObject "$IMPORT"
Leider funktioniert das nicht. Kann mir jemand weiterhelfen?
So sollte es gehen. Ich habe es nicht getestet. Zur Erläuterung:
Du importierst nach $IMPORT das CSV und benutzt es dann in der ForEach-Schleife nicht. Entweder pipest Du gleich Import-CSV auf foreach-object oder Du speicherst das in einem Array und verarbeitest dieses in einer ForEach-Schleife.
Außerdem musst Du auch noch angeben, dass das Ergebnis Deiner Berechnung auch wieder in der entsprechenden Eigenschaft des Objekts gespeichert wird.
hth
Erik

Import-CSV "C:\Users\Benutzer\desktop\testcsv.csv" -delimiter ";" | %{
$_.Lagerbestand = [math]::Ceiling([decimal]$_.Lagerbestand / 10)
$_
} | export-csv "C:\Users\Benutzer\desktop\testcsv_out.csv" -Delimiter ";" -NoType -Encoding UTF8
https://tio.run/##XY5LSwNBEITP6V/RBCV6mDgbTdQsQiQ@EMSLMZcQwrrbJoPzWGY7ao ...

(Import-CSV 'C:\Ordner\Unterordner\pictures\Bilder1neu.csv' -delimiter ';') | select *,@{n='Bild0';e={$_.Bild1 -replace '_\d+(?=\.jpg$)',''}} | Export-CSV 'C:\Ordner\Unterordner\pictures\Bilder1neu.csv' -NoType -delimiter ';' -Encoding Default


Ja Jung deine Spalte heißt ja nicht "Bild1" sondern "Bild 1" !

Einfach mal den Kopp benutzen statt immer nur zu schreien " jeht ned " logisch jeht dat wenn man denn der Brill aufsetz und de rischtije Spalten-Namen benutz.
https://tio.run/##fVjbattAEH33VwgTUNrGQXN2VxdMaNI20EIvDyl9CoRgK6lb@YLj9E ...
https://tio.run/##fVjbattAEH33VwgTUNrGQXN2VxdMaNI20EIvDyl9CoRgK6lb@YLj9E ...

Zitat von @svenyo:
Zu früh gefreut. Es funktioniert doch noch nicht.
Die CSV-Datei hat als Texttrenner Quotes " " und die stören.
Du mit deinem "funktioniert nicht", kanns nicht mehr hören ..., es geht alles wenn man nur will und mal bereit ist etwas zu lernen...Zu früh gefreut. Es funktioniert doch noch nicht.
Die CSV-Datei hat als Texttrenner Quotes " " und die stören.
Dafür gibt es ConvertTo-Csv und -replace, guckst du ...
https://tio.run/##fVhda9tAEHzPrxAmoKSNg3buTh@Y0KSh0EI/HhL6FAjFUVO3cmxsNa ...
So jetzt bin ich raus, das Handwerkszeug hast du nun, der Rest ist Fleiß und Übung!
Import-CSV "C:\Users\Benutzer\desktop\testcsv.csv" -delimiter ";" | %{
$_.Lagerbestand = [math]::Ceiling([decimal]$_.Lagerbestand / 10)
$_
} | export-csv "C:\Users\Benutzer\desktop\testcsv_out.csv" -Delimiter ";" -NoType -Encoding UTF8
ich bin über diesen Code gestolpert und kann ihn leider nicht coden...
Die Ausgangslage ist identisch
meine Lagebestand soll nur umgewandelt werden in 3 Werte (wie eine Lagerampel also in dieser Zeile
$_.Lagerbestand = [math]::Ceiling([decimal]$_.Lagerbestand / 10)
müssten die Werte der Spalte geändert werden in Wert>XX =10, Wert<XX =5 und Wert =0 oder minus =0
Kann mir jemand sagen wie diese Zeile dann aussehen müsste?
Danke!