CSV Werte automatisch ändern
Hi
ich brauche ein kleines Script, dass eine Spalte einer CSV Datei in Werte für eine Lagerampel ändert und diese csv dann per ftp auf meinen webserver bringt.
Spalte Anzahl muss geprüft werden auf
Wert >=30 wird dann aus gegeben zu Wert "grün"
Wert zwischen 1 und 29 wird dann aus gegeben zu Wert "gelb"
Wert =0 oder negativ wird zu Wert "rot" ausgegeben.
Das ganze wird unter einem neuen Namen als csv mit den anderen spalten der Ursprungstabelle gespeichert und per FTP hochgeladen.
Das Script wird dann zeitlich über die Win Aufgabenplanung ausgeführt.
Wer kann mir das gegen Honorar Schreiben?
Danke gruß
Litho
ich brauche ein kleines Script, dass eine Spalte einer CSV Datei in Werte für eine Lagerampel ändert und diese csv dann per ftp auf meinen webserver bringt.
Spalte Anzahl muss geprüft werden auf
Wert >=30 wird dann aus gegeben zu Wert "grün"
Wert zwischen 1 und 29 wird dann aus gegeben zu Wert "gelb"
Wert =0 oder negativ wird zu Wert "rot" ausgegeben.
Das ganze wird unter einem neuen Namen als csv mit den anderen spalten der Ursprungstabelle gespeichert und per FTP hochgeladen.
Das Script wird dann zeitlich über die Win Aufgabenplanung ausgeführt.
Wer kann mir das gegen Honorar Schreiben?
Danke gruß
Litho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3377461097
Url: https://administrator.de/forum/csv-werte-automatisch-aendern-3377461097.html
Ausgedruckt am: 16.03.2025 um 10:03 Uhr
9 Kommentare
Neuester Kommentar
Servus.
simples Powershell "plain ftp" Beispiel (Beispiel bei verschlüsseltem FTPs / SFTP mit WinSCP gibt's gerne per PN, findet sich aber auch hier schon im Forum):
Wie immer ohne Gewähr für Leib und Leben.
Grüße Uwe
simples Powershell "plain ftp" Beispiel (Beispiel bei verschlüsseltem FTPs / SFTP mit WinSCP gibt's gerne per PN, findet sich aber auch hier schon im Forum):
# --- Variablen --------------------
# Quelldatei
$csvfile_in = 'E:\daten.csv'
# geänderte Zieldatei
$csvfile_out = 'E:\daten_neu.csv'
# ftp server pfad
$FTP_TARGET = 'ftp://ftp.domain.tld/remotepath/zieldatei.csv'
# username
$FTP_USERNAME = 'XXXXXXXXXXXXX'
# password
$FTP_PASSWORD = 'XXXXXXXXXXXXXXXXXXXXX'
# ----------------------------------
# plain ftp upload function
function Upload-File([string]$path,[string]$url,$username,$password){
try{
$request = [System.Net.FtpWebRequest]::Create($url)
$request.Method = [System.Net.WebRequestMethods+FTP]::UploadFile
$request.Credentials = New-Object System.Net.NetworkCredential($username,$password)
[byte[]] $bytes = [System.IO.File]::ReadAllBytes($path)
[System.IO.Stream]$stream = $request.GetRequestStream();
$stream.Write($bytes,0,$bytes.Length)
$stream.Close(); $stream.Dispose()
$response = [System.Net.FtpWebResponse]$request.GetResponse()
$result = $response.StatusDescription
$response.Close()
return $result
}catch{
throw $_.Exception.Message
return $false
}
}
# importiere csv mit ";" delimiter
$csv = Import-CSV $csvfile_in -Delimiter ";"
# Zeilen der CSV verarbeiten
$csv | %{
$farbe = $_.Anzahl
# farbe je nach Wert zuordnen
switch([int64]$_.Anzahl){
{$_ -ge 30}{$farbe = 'grün'}
{$_ -ge 1 -and $_ -lt 30}{$farbe = 'gelb'}
{$_ -le 0}{$farbe = 'rot'}
}
# Spalte mit neuem Wert setzen
$_.Anzahl = $farbe
}
# geänderte Datei in CSV exportieren
$csv | export-csv $csvfile_out -Delimiter ";" -NoType -Encoding UTF8
# und per FTP hochladen
Upload-File -path $csvfile_out -url $FTP_TARGET -username $FTP_USERNAME -password $FTP_PASSWORD
Grüße Uwe
Zitat von @lithov:
Mit meinem laienhaften Wissen wird hier zeilenweise der lagerbestand umgesetzt oder?
Es wird nach deinem Post oben in der Spalte "Anzahl" der Farbwert entsprechend der Zahl ersetzt, heißt deine Spalte anders, musst du das Wort "Anzahl" in den Zeilen 36-44 des Skripts auch an deinen Namen anpassen.Mit meinem laienhaften Wissen wird hier zeilenweise der lagerbestand umgesetzt oder?
Zitat von @lithov:
Kann ich das irgendwie noch loggen lassen?, bzw. es rast so schnell durch und kommt nichts auf dem FTP an.
Start-TranscriptKann ich das irgendwie noch loggen lassen?, bzw. es rast so schnell durch und kommt nichts auf dem FTP an.
Oder mittels
powershell -EP Bypass -NoExit -F "D:\script.ps1"
Oder am Ende ein
Read-Host
eigentlich sollte da diese Datei $csvfile_out = 'E:\daten_neu.csv'
Jepp, aber nur lokal, Remote remote wird die Datei so benannt wie du es in der URL angibst, die URL-Angabe muss also Pfad und Dateinamen enthalten!entstehen oder wird die durch den Upload dann wieder gelöscht?
eventuell bestehende Dateien werden auf dem FTP ersetzt.Ich wollte jetzt nur den Fehler finden, bzw. ob es an meinen Zugangsdaten des FTP liegt. Aber eigentlich wäre es schön auch die ausgegebene Datei zu sehen.
Wie gesagt, das obige geht nur mit reinem plain FTP, willst du Verschlüsselung, muss es umgeschrieben werden (bspw. mit der WinSCP Bibliothek)...Wie man sowas mit WinSCP macht kannst du übrigens hier nachlesen
Script um Dateien zu verschieben und mail zu generieren
Zitat von @lithov:
Also es klappt soweit Vielen Dank für die Geduld mit einem absoluten Neuling. lediglich die ausgegeben Datei stellt die Umlaute nicht richtig dar.
Der Ausgang war eine UTF8
Das Ergebnis ist grün statt grün. und andere Umlaute in eine Spalte Beschreibung werden zu: �
Kann man da noch was machen??
Also es klappt soweit Vielen Dank für die Geduld mit einem absoluten Neuling. lediglich die ausgegeben Datei stellt die Umlaute nicht richtig dar.
Der Ausgang war eine UTF8
Das Ergebnis ist grün statt grün. und andere Umlaute in eine Spalte Beschreibung werden zu: �
Kann man da noch was machen??
Du musst das Encoding der CSV beim Import richtig angeben, PowerShell erkennt das nur richtig von selbst wenn das CSV File ein BOM hat wenn nicht muss das Encoding angegeben werden.
Beispiel für UTF8
$csv = Import-Csv $csvfile_in -Delimiter ";" -Encoding UTF8
👍 Merci.