Seite 1 von 2
ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 00:45
von Jet1199
Hallo Community,
ich lese aus einem gegebenen Verzeichnis die Unterverzeichnisse ein und zeige sie in einem Gadget an
Code: Alles auswählen
If ExamineDirectory(0, Directory$, "*.")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) <> #PB_DirectoryEntry_File
If DirectoryEntryName(0)<>"." And DirectoryEntryName(0)<>".." ; root und .. ausblenden
AddGadgetItem (0, -1, DirectoryEntryName(0)) ; Listview-Eintrag hinzufügen
SetGadgetState(0, 9) ; wir setzen (beginnend bei 0) den zehnten Eintrag als aktiven
EndIf
EndIf
Wend
EndIf
FinishDirectory(0)
Die Daten in der sich füllenden Liste sind aber unsortiert. Läßt sich ganz bestimmt alphabetisch erledigen.
Leider blieben all meine bisherigen Recherchen ergebnislos und ich bemühe Euch nun (wiedermal). Dafür danke ich im Voraus!
Edit by NictheQuick: Code-Tags gesetzt
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 00:53
von Kiffi
Jet1199 hat geschrieben:Läßt sich ganz bestimmt alphabetisch erledigen.
japp. Einfach innerhalb der While-Wend-Schleife eine LinkedList befüllen.
Diese kannst Du dann mit SortList() oder SortStructuredList() sortieren
lassen und danach damit Dein ListView füllen.
Grüße ... Kiffi
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 00:59
von STARGÅTE
@Jet1199
Du bist seit 6 Jahren in diesem Forum angemeldet und kennst keine Code-Tags ?
ExamineDirectory gibt bei mir immer eine nach dem Alphabet sortierte (ohne groß/kein) Liste zurück.
Es wäre zu dem nett, wenn du mal den ganzen Code zeigen würdest, es würde mich nämlich interessieren wie diese "unsortierte" Liste aussieht in deinem Gadget, weil ich mir wie schon gesagt nicht vorstellen kann das sie unsortiert ist.
Ansonsten Kiffis Vorschlag benutzen.
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 01:05
von NicTheQuick
Bei mir ist die Dateiliste auch immer unsortiert. Die Dateien werden üblicherweise genau in der Reihenfolge ausgegeben, wie sie in der MFT stehen.
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 01:06
von TomS
Das passiert sporadisch.
Hatte ich auch schonmal.
Auch der Windows-Explorer zeigt nicht immer alles alphabetisch sortiert an, auch wenn das Häkchen bei "Sortieren nach Name" gesetzt ist...

Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 01:24
von Jet1199
NicTheQuick hat geschrieben:Bei mir ist die Dateiliste auch immer unsortiert. Die Dateien werden üblicherweise genau in der Reihenfolge ausgegeben, wie sie in der MFT stehen.
Danke erstmal für die bisherigen, turbomäßigen Antworten.
Es brruhigt mich, daß einige dieses Problem nachvollziehen können. Ja, unsortiert ist immer wie in der MFT, d.h. es muß nichtmal eine zeitliche Sortierung sein.
@STARGÅTE:
Du hast Recht, ich bin schon lange dabei, aber weniger aus Spaß an der Freude, sondern aus Notwendigkeit. Eben immer mal wieder kleine Tools. So bin ich bis heute zwar Vollversionsinhaber seit vielen Jahren, aber immernoch Anfänger auf unterem Level.
So habe ich mir noch kein KnowHow zu Codetags angeeignet, was aber sicherlich zweckdienlich sein würde.
Den Code per Zwischenablage abzuwerfen ist also nicht der beste Weg. Aber wie müßte ich das Ergebnisfenster präsentieren (was ja nun sicherlich überflüssig ist?)
@Kiffi:
Ups, LinkedLists sind Neuland, das schaffe ich heute doch nicht mehr. Wenn sich dieser Umweg nicht umgehen läßt, werde ich mich damit auseinandersetzen. Danke für die schnellste Antwort

Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 01:46
von Kiffi
Jet1199 hat geschrieben:Ups, LinkedLists sind Neuland
na, dann wird's aber höchste Eisenbahn!
PureBasic -- Eine Einführung in die Computer-Programmierung
Seite 57 ff.
Grüße ... Kiffi
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 02:18
von STARGÅTE
NicTheQuick hat geschrieben:Bei mir ist die Dateiliste auch immer unsortiert. Die Dateien werden üblicherweise genau in der Reihenfolge ausgegeben, wie sie in der MFT stehen.
Bei mir ist die Dateiliste auch immer unsortiert. Die Dateien werden üblicherweise genau in der Reihenfolge ausgegeben, wie sie in der MFT stehen.
Hm sry, das kann ich nicht nachvollziehen.
Bei mir sind wirklich
alle Verzeichnisse die ich mit ExamineDirectory auslese, alphabetisch Sortiert!
Das kann nicht "Zufall" sein.
Natürlich müssen Namen mit Sonderzeichen extra betrachtet werden, da sie in ExamineDirectory anders sortiert werden als mit SortList()
Code: Alles auswählen
CreateRegularExpression(0, "^[a-zA-Z0-9]*$")
Procedure.s Check(Dir$)
Static Unsortiert, Summe
Protected Dir = ExamineDirectory(#PB_Any, Dir$, "")
Protected NewList Unsort.s(), NewList Sort.s()
If Dir
Summe + 1
While NextDirectoryEntry(Dir)
If DirectoryEntryName(Dir) <> "." And DirectoryEntryName(Dir) <> ".."
AddElement(Unsort()) : Unsort() = DirectoryEntryName(Dir)
If Not MatchRegularExpression(0, Unsort())
DeleteElement(Unsort())
EndIf
If DirectoryEntryType(Dir) = #PB_DirectoryEntry_Directory
Check(Dir$+"\"+DirectoryEntryName(Dir))
EndIf
EndIf
Wend
CopyList(Unsort(), Sort())
SortList(Unsort(), #PB_Sort_Ascending|#PB_Sort_NoCase)
ResetList(Sort())
ForEach Unsort()
NextElement(Sort())
If Sort() <> Unsort()
Unsortiert + 1
Debug Dir$
Break
EndIf
Next
EndIf
ProcedureReturn Str(Unsortiert)+" von "+Str(Summe)+" Verzeichnissen sind nicht sortiert!"
EndProcedure
Debug Check("D:")
0 von 4213 Verzeichnissen sind nicht sortiert!
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 26.01.2011 07:05
von Nino
Stargate, in Deinem Code fehlt etwas.
Code: Alles auswählen
FinishDirectory(Dir) ; <=====
EndIf
ProcedureReturn Str(Unsortiert)+" von "+Str(Summe)+" Verzeichnissen sind nicht sortiert!"
EndProcedure
Ich gehe nicht davon aus, dass PureBasic selbst die Dateinamen sortiert, sondern dass es einfach die Informationen weitergibt, die es vom
Betriebssystem geliefert bekommt. Die größte Rolle spielt wohl das
Dateisystem auf dem jeweiligen Datenträger. Ohne diese beiden Anagben sind Aussagen zu "sortiert/unsortiert" unvollständig.
Meine Ergebnisse mit obigem Code (PB 4.51 auf Windows XP Pro x86):
Debug Check("C:\") ; NTFS: 0 von 8809 Verzeichnissen sind nicht sortiert!
Debug Check("D:\") ; FAT32: 219 von 6618 Verzeichnissen sind nicht sortiert!
Entscheidend ist, dass man sich nicht generell darauf verlassen kann, dass die Dateinamen sortiert sind. Soll ein Programm also eine sortierte Reihenfolge garantieren, muss es diese prüfen beziehungsweise selbst herstellen.
Grüße, Nino
Re: ExamineDirectory sortiert Ergebnisse nicht
Verfasst: 30.01.2011 00:03
von Jet1199
Erstmal vielen Dank für all Eure konstruktiven Antworten.
Innerhalb meines Programmes verschiebe ich die Priorität der Sortierung zugunsten anderer, dringenderer Details. Aber ich werde es eilig nachholen und realisieren.
Besonderer Dank an STARGÅTE, der früh 6Uhr einen nachvollziebaren Schnipsel postete. Was habt Ihr für Jobs?!
Ich vermisse die Möglichkeit, einen Topic als "gelöst" zu kennzeichnen?!