Sie können PowerShell verwenden, das mit Windows Vista oder höher geliefert wird:
$keys = @( ); Import-Csv input.txt | ForEach-Object { if (!$_.head3) { $keys | Out-File output.txt; break; } else { if (!($keys -contains $_.head3)) { $keys += $_.head3; } } }
Dies kann bei großen Datenmengen langsam sein, da es ein Array ( $keys
) zum Halten und Überprüfen eindeutiger Schlüssel verwendet. Eine alternative Methode besteht darin, alles in eine Textdatei zu schreiben, zu sortieren und durchzuarbeiten Get-Unique
. Eine andere Alternative ist die Verwendung einer Hashtabelle (würde nicht bei der Speichernutzung helfen, wäre aber schneller als die Überprüfung, ob etwas in einem Array vorhanden ist).
Dies verwendet Import-Csv
, wobei die erste Zeile als Überschrift verwendet wird. Es übergibt dann ein Array von Objekten (Linien) an ForEach-Object
. $_
ist eine Variable, die auf jedes Objekt (Zeile) verweist. .head3
ist die Eigenschaft mit dem Namen head3
, die in den Beispieldaten als Spalte mit den Schlüsseln definiert ist. Er prüft, ob in dieser Zeile ein Wert für diese Spalte vorhanden ist. Wenn nicht, wird es in eine Datei ausgegeben und gemäß Ihrem Pseudocode beendet. Beachten Sie, dass Werte, die keine Schlüssel sind, möglicherweise akzeptiert werden. Wenn Sie strengere Regeln für einen Schlüssel haben / benötigen, können Sie die Länge überprüfen oder einen RegEx-Musterabgleich durchführen.
a71,a72,a73,a74 a71,a72,keyC,a74 some message a71,a72,keyD,a74
a73
Zählt derzeit als Schlüssel (in der dritten Spalte head3
). Das Programm endet um some message
, da es keine dritte Spalte hat und nicht lesen kann keyD
.
Wenn die Zeile über eine Schlüsselspalte verfügt, wird geprüft, ob der Schlüssel bereits im Array vorhanden ist, und wenn nicht, wird er hinzugefügt. Beachten Sie, dass -contains
die Groß- und Kleinschreibung nicht beachtet wird. Wenn dies ein Problem ist, kann es geändert werden.
Sie müssen also wahrscheinlich input.txt
output.txt
und head3
mit den richtigen Namen ersetzen . Dies war die einfachste Lösung, die die Reihenfolge der Daten nicht ändert, obwohl schnellere möglich sind, falls dies erforderlich ist.