Batch - Datenfiltern anhand bestimmter Voraussetzungen (nicht älter als 30 Tage)
Guten Tag liebe Gemeinde,
ich bin gerade dabei ein kleines Batch-Skript zu erstellen, was mir meine Daten filtert.
Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.
Geht das mit Batch?
TXT-Input:
TXT-Output:
Mit den besten sonnigsten Grüßen
ich bin gerade dabei ein kleines Batch-Skript zu erstellen, was mir meine Daten filtert.
Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.
Geht das mit Batch?
TXT-Input:
1000-001;5,00;19.07.2022;
1000-001;3,00;14.07.2022;
1000-001;5,00;19.07.2022;
1000-001;5,00;19.06.2022;
1000-001;5,25;19.07.2022;
1000-001;4,00;19.07.2022;
1000-002;5,25;19.04.2022;
1000-002;4,00;19.06.2022;
1000-002;2,00;01.07.2022;
TXT-Output:
1000-001;3,00;14.07.2022;
1000-002;2,00;01.07.2022;
Mit den besten sonnigsten Grüßen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 3379572611
Url: https://administrator.de/contentid/3379572611
Ausgedruckt am: 07.08.2022 um 14:08 Uhr
1 Kommentar
Moin,
Mit Powershell ist das Ganze ein Kinderspiel:
Powershell Leitfaden für Anfänger
Gruß Thomas
Zitat von @freshman2017:
Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.
Geht das mit Batch?
alleine schon das Datum -30 Tage zu berechnen und danach zu filtern ist mit Batch kaum anständig möglich.Ich würde gerne aus einer Textdatei jeweils immer die Zeile in einer Zieldatei stehen haben, bei dem der Wert in der 2. Spalte kleinste ist, aber anhand des Datums, was nicht älter sein darf als 30 Tage.
Geht das mit Batch?
Mit Powershell ist das Ganze ein Kinderspiel:
# Quelldatei und Zieldatei
$Source = "C:\Pfad\zur\Import.csv"
$Target = "C:\Pfad\zur\Ausgabe.csv"
# Als CSV-Daten importieren
$CSV = Import-CSV -Path $Source -Delimiter ';' -Header 'Nummer','Wert','Datum'
# Datei nach Datum filtern und nach Werten Sortieren
$CSV = $CSV | Where {[datetime]::Parse($_.Datum) -ge (Get-Date).Date.AddDays(-30)} | Sort {[double]$_.Wert}
# Für jede Nummer den niedrigsten Wert ausgeben
$Output = $CSV | Group 'Nummer' |Foreach {$_.Group[0]}
# In Text umwandeln und Ausgeben
($Output | ConvertTo-CSV -NoTypeInformation -Delimiter ';').Replace('"','') | Select -Skip 1 | Set-Content $Target
Gruß Thomas