Seite 1 von 1

Probleme mit SortStructuredList

Verfasst: 26.09.2006 12:19
von Agent
Kann mir jemand verraten, warum folgender Code-Ausschnitt nicht funktioniert?

Code: Alles auswählen

#max_appname_length=20

;- STRUCTURES
Structure ApplicationInfo
  AppName.s[#max_appname_length]
  AppPath.s[1000]
EndStructure

;- LISTS
NewList Applications.ApplicationInfo()

AddElement(Applications())
Applications()\AppName="Test 1"

AddElement(Applications())
Applications()\AppName="Test 2"



SortStructuredList(Applications(), 0, OffsetOf(Applications()\AppName), #PB_Sort_String)


ForEach Applications()
  Debug Applications()\AppName
Next

Verfasst: 26.09.2006 12:51
von AND51
Du solltest die Fehlermeldung richtig lesen, aber keine Ansgt, dafür hast du ja mich :wink:
Structure not found: Applications()
Und da hat er Recht: Applications(9 ist eine Liste und keine Struktur!

So muss es richtig lauten, dann funktioniert's auch (Zur Demonstration habe ich die Elemente Test 1+2 neu angeordnet, damit man den Sortiereffekt sieht):

Code: Alles auswählen

#max_appname_length=20 

;- STRUCTURES 
Structure ApplicationInfo 
  AppName.s[#max_appname_length] 
  AppPath.s[1000] 
EndStructure 

;- LISTS 
NewList Applications.ApplicationInfo() 

AddElement(Applications()) 
Applications()\AppName="Test 2" 

AddElement(Applications()) 
Applications()\AppName="Test 1" 



SortStructuredList(Applications(), 0, OffsetOf(ApplicationInfo\AppName), #PB_Sort_String) 


ForEach Applications() 
  Debug Applications()\AppName 
Next

Verfasst: 26.09.2006 13:17
von DarkDragon
Sorry, aber ich muss jetzt irgendwie was nicht verstanden haben:

Du deklarierst in deiner Struktur einen statischen Array:

Code: Alles auswählen

  AppName.s[#max_appname_length]
Mit dem Datentyp String.

Nun setzt du irgendwas(k.A. welches element du in diesem Array nimmst) dieses Strings auf "Test 2" im zweiten Element und "Test 1" im ersten Element. | Ich weiß echt nicht warum der Compiler da nicht meckert, dass du dem Pointer zu diesem Array einen String zuweißt und es dann sogar noch funktioniert. Normalerweise nimmt man ein char-array(in den man speicherbereiche kopiert/ausliest) oder fixed string für sowas aber nicht einen String-Array.

[EDIT]
Ein paar Sätze von mir sind verwirrend :freak: . Ich hab nen senkrechten Strich hingemacht ab wann man es lesen kann.

Verfasst: 26.09.2006 13:39
von NicTheQuick
DarkDragon hat Recht.

Eigentlich sollte es bestimmt so aussehen:

Code: Alles auswählen

#max_appname_length=20

;- STRUCTURES
Structure ApplicationInfo
  AppName.s{#max_appname_length}
  AppPath.s{1000}
EndStructure

;- LISTS
NewList Applications.ApplicationInfo()

AddElement(Applications())
Applications()\AppName="Test 2"

AddElement(Applications())
Applications()\AppName="Test 1"

SortStructuredList(Applications(), 0, OffsetOf(ApplicationInfo\AppName), #PB_Sort_String)

ForEach Applications()
  Debug Applications()\AppName
Next
Allerdings macht hier SortStructuredList() einen Fehler und ich weiß nicht
warum, liegt wohl an den neuen begrenzten Strings.

Hier mal mit einem anderen Beispiel:

Code: Alles auswählen

Structure TextTest
  s.s;{100}       ; <- Das Kommentarzeichen am Anfang mal entfernen
  l.l
EndStructure

NewList Text.TextTest()

AddElement(Text()) : Text()\s = "zebra"      : Text()\l = 1
AddElement(Text()) : Text()\s = "Auerhahn"   : Text()\l = 2
AddElement(Text()) : Text()\s = "amsel"      : Text()\l = 3
AddElement(Text()) : Text()\s = "tierschutz" : Text()\l = 4

SortStructuredList(Text(), 2, OffsetOf(TextTest\s), #PB_Sort_String)

ForEach Text()
  Debug Str(Text()\l) + ": " + Text()\s
Next
Dazu fällt mir gerade noch ein, dass man die Hilfe bei den ganzen
Sortier-Funktionen etwas umändern sollte. Und zwar der Teil mit den
"Options":
0: Sortiert das Array in aufsteigender Richtung (kleine Zahlen zuerst, Strings werden mit Berücksichtigung der Groß-/Kleinschreibung sortiert)
1: Sortiert das Array in absteigender Richtung (große Zahlen zuerst, Strings werden mit Berücksichtigung der Groß-/Kleinschreibung sortiert)
2: Sortiert ein String-Array ohne Berücksichtigung der Groß-/Kleinschreibung (a=A, b=B etc..) in aufsteigender Richtung
3: Sortiert ein String-Array ohne Berücksichtigung der Groß-/Kleinschreibung (a=A, b=B etc..) in absteigender Richtung
Ich zumindest dachte lange Zeit es gibt keine Möglichkeit Strings mit
Berücksichtigung der Groß- und Kleinschreibung zu sortieren. Irgendwann
hab ich das dann aber zufällig gemerkt.

Verfasst: 26.09.2006 13:52
von Agent
Hallo ihr 2

Schön das ihr euch damit beschäftigt habt. Die verdammten Code-Ausschnitte führen immer wieder zu fehlern :(

Aber egal. Trotzdem geht es nicht, warum? Funktioniert die SortStruc...nicht mit strings??

Verfasst: 26.09.2006 14:23
von AND51
>Hallo ihr 2
Also ich seh hier 3... :?

Verfasst: 26.09.2006 17:22
von Agent
*hehe*

1. ja
2. vergess ich immer meine posts abzusenden

Ich habs übrigens gelöst und den Fehler gefunden ;)

Vielen Dank!



Es darf nicht

Code: Alles auswählen

OffsetOf(Applications()\AppName)
sondern muss

Code: Alles auswählen

OffsetOf(ApplicationInfo\AppName)
heißen!

Die Structure habe ich nun wie folgt:

Code: Alles auswählen

Structure ApplicationInfo
  AppName.s
  AppPath.s
EndStructure 

Verfasst: 27.09.2006 14:27
von AND51
Hab ich das nicht gesagt oder werde ich ignoriert? :(