Wenn man Attribute tatsächlich sortiert haben will/muß, gäbe es folgende Möglichkeit die Suchreihenfolge individuell anzugeben:
Für jedes mögliche Attribut gibt man (also dort, wo man jetzt die Häkchen setzen kann), entweder ein:
* einen Großbuchstaben für 'gesetzt/nicht gesetzt'
* einen kleinbuchstaben für 'nicht gesetzt/gesetzt'
* eine '0' für 'Nicht gesetzt'
* eine '1' für 'Gesetzt'
* Blank für egal
Nach der Eingabe wäre zu prüfen, ob Buchstaben (unabhängig von der Schreibweise) eindeutig sind (dh. es dürfen zB. keine zwei oder mehr 'B' oder 'b' vorkommen).
Die Attributfilterung läuft dann so ab:
Für jeden vorhandenen Fileentry wird das Attribut-Byte wie folgt temporär geändert (Bitreihenfolge von links nach rechts):
1) Ist für ein Attributbit '1' oder '0' eingegeben worden, aber das aktuelle Bit paßt nicht, so wird dieser Eintrag verworfen
2)In der Reihenfolge des Alphabetes wird für jeden verwendeten Buchstaben (sind max.8 Buchstaben - der Performance wegen vorher zu normieren) bei Großbuchstabe das entsprechende Original-Attributbit invertiert (!!) übernommen, bei Kleinbuchstaben original übernommen.
3) Alle anderen Attributbits werden 1:1 übernommen
Dann wird nach dieser temporären Attributwerten sortiert.
Zum Beispiel:
Man hätte gerne alle Read-Only-Files, und innerhalb dieser sortiert nach 1) System-Files (nein/ja) und 2) Hidden (ja/nein).
Dann gibt man zB. ein:
System-Attribute: 'a'
Hidden-Attribute: 'D'
Read-Only: '1'
Man beachte: es ist nicht zwingend, sich genau an das ABC zu halten - es kommt auf die relative Position der Buchstaben an!
Dann passiert folgendes:
1)Alle Zeilen ohne gesetztem Readonly-Bit werden verworfen.
2)Erzeugen der Inverter-Maske '01000000'B (1.Sortierspalte: System-unverändert, 2.Sortierspalte:Hidden-invertiert).
3)Jedes (noch) vorhandene Attributbyte wird temporär bitweise wie folgt umgesetzt:
SHxxxxxx
wobei die 'xxxxxx' die restlichen Attributbits in beliebiger Reihenfolge sind
4)Das temporäre Attributbyte wird mit der generierten Invertermaske '01000000'B XORed (Hidden-Attribut ist zu invertieren!).
5)Nach diesem temporären Attributebyte sortieren.
In der Zeilen-Anzeige als solche greift man wieder auf die Original-Attribute zu, um diese anzuzeigen, dort bedarf es also keiner Kenntnis der Sortierfolge (und der dadurch geänderten Bitfolge des temporären Attributebytes) mehr.
Eine derartige Angabe von willkürlichen Sortattributen habe ich schon mal implementiert, ist anspruchsvoll aber nicht wirklich schwer. Dort handelte es sich um eine Datenbankabfrage, wo man echte Vergleiche anstellen mußte.
Hier könnte ich mir vorstellen, daß es wesentlich performanter wäre, auf Grund der Eingaben eine 256-stellige Translatetabelle zu generieren und dann jedes Attributbyte einfach zu übersetzen. Auch die Invertierung ließe sich dann dort verpacken und damit ein weiterer Schritt einsparen.
Wäre doch 'ne echte Herausforderung das auch im TC zu implementieren
