Aktuelle Zeit: 04.06.2020 18:25

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 16:27 
Offline
Benutzeravatar

Registriert: 11.10.2005 15:46
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

_________________
PureBasic 5.71 | Windows 10 pro (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 16:48 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Hi Zerosurf, . . . vielleicht meinst Du so etwas?

Code:
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:14 
Offline
Benutzeravatar

Registriert: 11.10.2005 15:46
Super, vielen Dank!

Kann ich das ganze auch ohne Liste machen, nur mit den Variablen?

_________________
PureBasic 5.71 | Windows 10 pro (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:39 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:40 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Zerosurf hat geschrieben:
Super, vielen Dank!

Kann ich das ganze auch ohne Liste machen, nur mit den Variablen?


Wenn Du eine 'Liste' von Werten verarbeiten möchtest, ist das Verwenden einzelner Variablen hierfür denkbar ungeeignet.
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:42 
Offline
Benutzeravatar

Registriert: 11.10.2005 15:46
Ok, hier ist der Code:

Code:
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$


Mit "ListIndex" war es schon mal eine gute Idee, aber trotzdem komm ich da irgendwie nicht weiter! :(

_________________
PureBasic 5.71 | Windows 10 pro (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:46 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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. :wink:

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 17:51 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
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. :wink:

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 18:02 
Offline
Benutzeravatar

Registriert: 11.10.2005 15:46
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.

_________________
PureBasic 5.71 | Windows 10 pro (x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ganzzahlen ordnen
BeitragVerfasst: 20.01.2020 18:08 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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:
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")

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye