Ganzzahlen ordnen
Ganzzahlen ordnen
Hallo Leute,
hab nach langer Pause endlich wieder mal mit dem Programmieren weitergemacht und komm einfach nicht drauf, wie ich eine Reihe bzw Liste von unterschiedlichen Zahlen der Reihe nach ordnen und deren Werte ändern kann, so daß es wie folgt aussieht:
a = 12
b = 3
c = 5
d = 1
usw....
diese möchte ich dann aufsteigend ordnen, daß sie so zb aussieht:
d = 1
b = 3
c = 5
a = 12
dann sollten die Werte so geändert werden, daß sie bei Null beginnend eine normale Zahlenfolge ergibt:
d = 0
b = 1
c = 2
a = 3
Wie schaff ich das?
Liebe Grüße aus Tirol,
zerosurf
hab nach langer Pause endlich wieder mal mit dem Programmieren weitergemacht und komm einfach nicht drauf, wie ich eine Reihe bzw Liste von unterschiedlichen Zahlen der Reihe nach ordnen und deren Werte ändern kann, so daß es wie folgt aussieht:
a = 12
b = 3
c = 5
d = 1
usw....
diese möchte ich dann aufsteigend ordnen, daß sie so zb aussieht:
d = 1
b = 3
c = 5
a = 12
dann sollten die Werte so geändert werden, daß sie bei Null beginnend eine normale Zahlenfolge ergibt:
d = 0
b = 1
c = 2
a = 3
Wie schaff ich das?
Liebe Grüße aus Tirol,
zerosurf
PureBasic 6.00 | Windows 10 pro (x64)
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Ganzzahlen ordnen
Hi Zerosurf, . . . vielleicht meinst Du so etwas?
Code: Alles auswählen
Structure MyWerte
Name.s
Wert.l
EndStructure
NewList MyList.MyWerte()
; ------------------------ unsortierte Liste mit zufälligen Ganzzahlen erzeugen -------------------------
For n = 1 To 10
AddElement(MyList())
MyList()\Name = Chr(64+n) ; erzeugt die Namen 'a', 'b', 'c', usw.
MyList()\Wert = Random(1000) ; vergibt einen zufälligen Wert zwischen 0 und 1000
Next
Debug "---- unsortiert ----"+#CRLF$
ForEach MyList()
Debug MyList()\Name + " = " + MyList()\Wert
Next
; --------------------- Liste an hand der 'Werte' sortieren -------------------
SortStructuredList(MyList(), #PB_Sort_Ascending, OffsetOf(MyWerte\Wert), #PB_Long) ; ----- sortiert die Liste anhand des Feldes "Wert.l"
Debug #CRLF$+"---- sortiert ----"+#CRLF$
ForEach MyList()
Debug MyList()\Name + " = " + MyList()\Wert
Next
; -------------------- 'Wert' auf die Nummer des Listenelements setzen ... also 0, 1, 2, 3, ... ------------------------
Debug #CRLF$+"---- Werte durchnummeriert ----"+#CRLF$
ForEach MyList()
MyList()\Wert = ListIndex(MyList())
Debug MyList()\Name + " = " + MyList()\Wert
Next
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: Ganzzahlen ordnen
Super, vielen Dank!
Kann ich das ganze auch ohne Liste machen, nur mit den Variablen?
Kann ich das ganze auch ohne Liste machen, nur mit den Variablen?
PureBasic 6.00 | Windows 10 pro (x64)
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Ganzzahlen ordnen
Nein. Purebasic ist keine Skriptsprache. Abgesehen davon würde dann ja die ganze Dynamik verloren gehen.
Hast du vielleicht ein ganz anderes Problem und uns nur die zweite Hälfte erzählt? Vielleicht können wir dir dann weiter helfen.
Hast du vielleicht ein ganz anderes Problem und uns nur die zweite Hälfte erzählt? Vielleicht können wir dir dann weiter helfen.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Ganzzahlen ordnen
Wenn Du eine 'Liste' von Werten verarbeiten möchtest, ist das Verwenden einzelner Variablen hierfür denkbar ungeeignet.Zerosurf hat geschrieben:Super, vielen Dank!
Kann ich das ganze auch ohne Liste machen, nur mit den Variablen?
Hier wäre auch eine Sortierung seeeeehr aufwändig.
Wenn Du keinen Wert auf den 'Namen' (a,b,c,...) legst, kannst Du das Beispiel auch mit einer dimensionierten Variable umsetzen (siehe Befehl 'Dim').
Hier würdest Du die 'Werte' statt in 'einzelne' Variable (a,b,c,...) in eine dimensionierte Variable (z.B. Dim x(10)) schreiben (also statt in a,b,c,... in x(0), x(1), x(2),...)
Zum Sortieren kannst Du dann den Befehl "SortArray()" nutzen.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: Ganzzahlen ordnen
Ok, hier ist der Code:
Mit "ListIndex" war es schon mal eine gute Idee, aber trotzdem komm ich da irgendwie nicht weiter!
Code: Alles auswählen
Template$ = "D-N - A - T"
Filename$ = "SF390-01 - Freya Ridings - Lost Without You"
PositionA = FindString(Template$, "A")
PositionT = FindString(Template$, "T")
PositionD = FindString(Template$, "D")
PositionN = FindString(Template$, "N")
NewList Positions.l()
AddElement(Positions()) : Positions() = PositionA
AddElement(Positions()) : Positions() = PositionT
AddElement(Positions()) : Positions() = PositionD
AddElement(Positions()) : Positions() = PositionN
SortList(Positions(), #PB_Sort_Ascending)
ForEach Positions()
Positions() = ListIndex(Positions())
Debug Positions()
Next
Debug PositionA
Debug PositionT
Debug PositionD
Debug PositionN
Artist$ = Trim(StringField(Filename$, PositionA, "-"))
Title$ = Trim(StringField(Filename$, PositionT, "-"))
DiscID$ = Trim(StringField(Filename$, PositionD, "-"))
TrackNr$ = Trim(StringField(Filename$, PositionN, "-"))
Debug "Artist: " + Artist$
Debug "Title: " + Title$
Debug "DiscID: " + DiscID$
Debug "TrackNr: " + TrackNr$
PureBasic 6.00 | Windows 10 pro (x64)
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Ganzzahlen ordnen
Ohne Struktur wird das nichts. Schau dir das Beispiel von PureLust nochmal genauer an und versuche sie zu verstehen. Du hast eigentlich nichts davon angewandt.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Ganzzahlen ordnen
Mal 'ne kleine Frage ... was möchtest Du mit dem Code überhaupt bewirken?
Denn wenn Du das machen möchtest, was ich denke was Du machen möchtest, bist Du das ganze viiiiiel zu kompliziert angegangen.
Denn wenn Du das machen möchtest, was ich denke was Du machen möchtest, bist Du das ganze viiiiiel zu kompliziert angegangen.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: Ganzzahlen ordnen
Der Code soll bewirken, daß ich Karaoke Lieder die in unterschiedlicher Form abgespeichert sind, wie zB. "DiscID-TrackNr - Artist - Title.mp3" oder "Artist - Title - TrackNr.mp3", also in den unterschiedlichsten Varianten in eine Datenbank speichern kann.
Ich muss dem Programm eben sagen, an welcher Stelle vom Dateinamen wo sich was befindet (Template$ = "D-N - A - T") welches ich mittels InputRequester eingebe und dann soll es alle Lieder mit dem richtigen "Naming" in der Datenbank abspeichern.
Ich muss dem Programm eben sagen, an welcher Stelle vom Dateinamen wo sich was befindet (Template$ = "D-N - A - T") welches ich mittels InputRequester eingebe und dann soll es alle Lieder mit dem richtigen "Naming" in der Datenbank abspeichern.
PureBasic 6.00 | Windows 10 pro (x64)
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Ganzzahlen ordnen
Ja, das hab ich auch so verstanden. Ich würde es in etwa wie folgt machen, aber das ist jetzt halt schon etwas fortgeschrittener und es gäbe noch ein Problem, wenn am Ende des Templates was anderes als ein Buchstabe steht. Es funktioniert mit allen Großbuchstaben von A bis Z. Alle andere Zeichen im Template werden als zwingende Trennzeichen angesehen.
Code: Alles auswählen
Procedure ExtractByMask(string.s, template.s, Map info.s())
Protected it.i, itOld.i, t.s, marker.s = "", pos.i, between.s
For it = 1 To Len(template)
t = Mid(template, it, 1)
If t >= "A" And t <= "Z"
If marker <> ""
between = Mid(template, itOld + 1, it - itOld - 1)
pos = FindString(string, between)
info(marker) = Mid(string, 1, pos - 1)
string = Mid(string, pos + Len(between))
EndIf
itOld = it
marker = t
EndIf
Next
info(marker) = string
EndProcedure
Template$ = "D-N - A - T"
Filename$ = "SF390-01 - Freya Ridings - Lost Without You"
NewMap info.s()
ExtractByMask(Filename$, Template$, info())
Debug "Artist: " + info("A")
Debug "Title: " + info("T")
Debug "DiscID: " + info("D")
Debug "TrackNr: " + info("N")