Powershell - Doppelte Dateien markieren

batch_prog

Cadet 2nd Year
Registriert
März 2017
Beiträge
27
Guten Tag, vielleicht ist hier jemand der mir bei einer Anpassung weiterhelfen kann?

Ausgangs-CSV-Datei:
Code:
BANANEN;500,00;5;
BANANEN;500,00;10;
KIRSCHEN;45,00;10;
ÄPFEL;5,00;50;
125;5,00:50;

Gewünschte-CSV-Datei:

Code:
BANANEN;500,00;5;TRUE;
BANANEN;500,00;10;TRUE;
KIRSCHEN;45,00;10;FALSE;
ÄPFEL;5,00;50;FALSE;
125;5,00:50;FALSE;

Bei doppelten Einträgen anhand der ersten Spalte, soll in der letzten Spalte TRUE; hinzugefügt werden, sonst FALSE;

Folgendes Skript konnte ich mir schon zusammenstellen:

Code:
$quelle = 'C:\Users\test.csv'
$ziel = 'C:\Users\test.csv'
$numcols = (gc $quelle -head 1).split(";").count
$csv = Import-CSV $quelle -Delimiter ";" -Header (1..$numcols)
($csv | group '1' | %{
    if ($_.Count -gt 1){
        $[I].Group | %{$[/I].$numcols = 1}
        $_.Group
    }else{
        $_.Group
    }
} | ConvertTo-CSV -delimiter ";" -NoType | select -Skip 1) -replace '"','' | sc $ziel

Wer kann mir weiterhelfen, dass ich die gewünschte Datei hinbekomme?

Schönen Tag Euch :-)
 
Ich habe keine Ahnung von Powershell, doch wo speicherst Du hier alle Werte zwischen, so daß Du dann feststellen kannst, ob ein Objekt mehrfach vorkommt?
 
PHuV schrieb:
doch wo speicherst Du hier alle Werte zwischen
Mit "Import-CSV" wird der Inhalt der entsprechenden Datei in den Zwischenspeicher geladen.

Ich kann mich jetzt von hier aus nicht intensiv genug mit dem Code auseinandersetzen und testen, weil ich nicht zuhause am Rechner bin.
Aber auf die Schnelle kommt mir der Gedanke, dass die Produkte (BANANE etc.) in der Datei, die am Anfang jeder Zeile aufgeführt sind, jeweils einzeln in eine Variable übertragen werden müssen. $Banane = "BANANE" usw.
Oder du weißt, welche Produkte mehrfach aufgeführt sind und in welchen Zeilen die stehen.
Je nach Anzahl der in der Datei aufgeführten Produkte, kann das ganz schön aufwändig werden.

Ansonsten wird es schwierig. Aber vielleicht haben ja andere eine Idee, wie man das Geschicktesten lösen kann.
 
Die Daten kommen aus einer CSV Datei - wenn es mit Batch einfacher geht, dann würde auch Batch gehen.
 
Hi,

Bring die Quelldaten in Ordnung. Zeile 5 ist ein : anstatt , Mach das auch in dem anderen Forum wo Du gepostet hast. ;)

Dein eigener Code hier liefert Fehler. Ich hab den originalen Code aus dem anderen Forum. :D

Mit einer Quell-Datei wie dieser:

Code:
BANANEN;500,00;5;
BANANEN;500,00;10;
KIRSCHEN;45,00;10;
AEPFEL;5,00;50;
BIRNEN;5,00;50;

erhaelst Du das hier:

Code:
BANANEN;500,00;5;TRUE
BANANEN;500,00;10;TRUE
KIRSCHEN;45,00;10;FALSE
AEPFEL;5,00;50;FALSE
BIRNEN;5,00;50;FALSE

wenn Du den Code so anpasst. Als Bild, weil das Forum den Code (trotz Angabe Powershell) zerlegt.

809416


Achte auf die Zeilen 7, 10 und 11.

BFF
 
Erklärt mir bitte jemand alten Programmierer, wo hier das Vor- und Nachlesen stattfindet? :confused_alt: Ich peile den Code hier nicht.

Hast Du den bemerkt, daß Deine Anpassungen Reihenfolge der Daten beeinflußt?
 
Zuletzt bearbeitet:
Hi,

Zeile 3 das gc aka Get-Content. Da beginnt es.
Es ist eigentlich ein Powershell-Einzeiler so wie auch z.B. mit awk moeglich waere.
Die OriginalQuelle des Codes ist hier.
https://administrator.de/forum/batch-doppelte-datensätze-csv-kennzeichnen-483445.html
https://administrator.de/forum/frage-powershell-fast-perfektes-skript-vorhanden-483906.html

Meinereiner hat nur die Anpassung gemacht das am Ende des Gruppierens das Gewuenschte "TRUE" oder "FALSE" erscheint. Mit Powershell ansich beschaeftige ich mich so gut wie garnicht.

BFF
 
Zuletzt bearbeitet:
Zurück
Oben