gravelking
Goto Top

Export Artikel ich verstehe es nicht

Hallo zusammen,

ich stehe mal wieder auf dem Schlauch.
Ich muss aus einem Textfile die doppelt vorhandenen Artikel anhand der "Angelegt am" Spalte vergleichen
und den älteren Artikel in ein neues File speichern. Hier wird dann zusätzlich "Gesperrt" auf TRUE gesetzt.

Das ganze funktioniert auch schon fast, allerdings werden mir auch Artikel exportiert, die eine unterschiedliche
Bezeichnung haben. z.B. HP2470991 und HP2470991LA

Das Textfile ist wie folgt aufgebaut:

Artikelnummer;Artikelindex;Gesperrt;Angelegt am
HP2470991;UNBEKANNT;False;01.02.2023 05:00:14
HP2470991LA;UNBEKANNT;False;12.05.2023 05:00:12

das Exportfile sieht dann so aus:

Artikelnummer;Artikelindex;Gesperrt;Angelegt am
HP2470991;UNBEKANNT;True;01.02.2023 05:00:14


mein Script sieht bisher so aus:

# Read the input file
$articles = Import-Csv -Delimiter ';' -Path D:\temp\test-artikel.txt  

# Find the oldest article
$oldestArticle = $articles | Sort-Object 'Angelegt am' | Select-Object -First 1  

# Set the Gesperrt column to True
$oldestArticle.Gesperrt = 'True'  

# Write the result to a new file
$oldestArticle | ConvertTo-Csv -Delimiter ';' -NoTypeInformation | ForEach-Object { $_ -replace '"' } | Set-Content 'D:\temp\wtf.txt' -Encoding UTF8  


Kann mir das jemand erklären? Ich verstehe es nicht.

Grüße

Content-ID: 8030825055

Url: https://administrator.de/contentid/8030825055

Ausgedruckt am: 25.11.2024 um 05:11 Uhr

7907292512
Lösung 7907292512 02.08.2023 aktualisiert um 15:06:43 Uhr
Goto Top
allerdings werden mir auch Artikel exportiert, die eine unterschiedliche Bezeichnung haben
Du gruppierst ja noch nicht mal doppelt Einträge raus ...
# CSV importieren
$csv = Import-Csv -Delimiter ';' -Path D:\temp\test-artikel.txt  
# csv nach "Angelegt am" Datum aufsteigend sortieren und dann anhand der Artikelnummer gruppieren und nur Artikel nehmen von denen es mindestens 2 gibt 
($csv | sort-object {[datetime]::Parse($_.'Angelegt am')} | group-object Artikelnummer | ? Count -gt 1 | %{  
        # vom ältesten die Gesperrt Eigenschaft festlegen
        $_.Group[0].Gesperrt = "True"  
        # und dann den Artikel ausgeben
        $_.Group[0]
} | ConvertTo-csv -Delimiter ";" -NoTypeInformation) -replace '"' | Set-Content 'D:\temp\wtf.txt' -Encoding UTF8  
tio.run (Live-Demo)

Gruß siddius
gravelking
gravelking 02.08.2023 um 16:03:23 Uhr
Goto Top
Zitat von @7907292512:

Du gruppierst ja noch nicht mal doppelt Einträge raus ...

Doppelte Einträge dürfte es ja eigentlich gar nicht geben, da das "Angelegt am" Datum ja immer unterschiedlich ist.

Egal, bin wohl einfach zu doof dafür.
So funktioniert es auf jeden Fall, vielen Dank.

grüße