String auflösen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: String auflösen

Beitrag von Kiffi »

Skiller hat geschrieben:

Code: Alles auswählen

#PB_Key_Minus
reagiert ab der 4.51 nicht... zumindest bei mir.
Könnt Ihr das mal checken?
Konstanten haben noch nie reagiert. :)

Code?

Grüße ... Kiffi
a²+b²=mc²
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Re: String auflösen

Beitrag von Skiller »

Das Gegenteil von #PB_Key_Add ist #PB_Key_Subtract und nicht #PB_Key_Minus, wie ich zuerst vermutete. Die Taste #PB_Key_Minus ist mir nicht klar. Der normale "-" neben rechts/shift ist es bei mir jedenfalls nicht. Wie auch immer. Ist im Moment auch nicht so wichtig.
so long...
Skiller
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Re: String auflösen

Beitrag von Lord »

Skiller hat geschrieben:Das Gegenteil von #PB_Key_Add ist #PB_Key_Subtract und nicht #PB_Key_Minus, wie ich zuerst vermutete. Die Taste #PB_Key_Minus ist mir nicht klar. Der normale "-" neben rechts/shift ist es bei mir jedenfalls nicht. Wie auch immer. Ist im Moment auch nicht so wichtig.
so long...
Skiller
Wenn Du die Plus und Minus-Tasten für Shortcuts verwenden willst,
sind es auf dem NumPad #PB_Shortcut_Add und #PB_Shortcut_Subtract.
Auf einer deutschen Tastatur haben sie die Werte 187 für Plus und 189 für Minus.
PB-Konstanten habe ich dazu auf die Schnelle nicht gefunden.
Bild
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Re: String auflösen

Beitrag von Skiller »

Hi, Experts.
Habe mich nun einige Zeit mit dem Code von "cxAlex" auseinandergesetzt und versucht, aus '@Func1())' eine '@FuncX())' zu machen, was mir allerdings bei meinen bescheidenen PB-Erfahrungen nicht möglich ist. Wenn es denn überhaupt möglich ist, oder vielleicht doch ??! Dann wäre die Sache echt perfekt!!! :allright:

DANKE !!! Skiller

Code: Alles auswählen

EnableExplicit
Define.b i
;------------------------------------
Prototype _Func()

Structure _Func_Dummy
  *_caller._Func
EndStructure

Global NewMap _Func._Func_Dummy()
;------------------------------------
Macro RegisterFunc(_Name, FunctionPointer)
  _Func(_Name)\_caller = FunctionPointer
EndMacro

Macro Func(_n)
  _Func(_n)\_caller
EndMacro
;-------------------------------------
Procedure Func1()
  Debug "Das ist Funktion 1"
EndProcedure

Procedure Func2()
  Debug "Das ist Funktion 2"
EndProcedure

For i = 1 To 2
   RegisterFunc(Str(i), @Func1())
  ;RegisterFunc(Str(i), @Func2())
   Func(Str(i))()
Next i
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: String auflösen

Beitrag von NicTheQuick »

Du meinst so?

Code: Alles auswählen

EnableExplicit
Define.b i
;------------------------------------
Prototype _Func()

Structure _Func_Dummy
	*_caller._Func
EndStructure

Global NewMap _Func._Func_Dummy()
;------------------------------------
Macro RegisterFunc(_Name, FunctionPointer)
	_Func(_Name)\_caller = FunctionPointer
EndMacro

Macro Func(_n)
	_Func(_n)\_caller
EndMacro
;-------------------------------------
Procedure Func1()
	Debug "Das ist Funktion 1"
EndProcedure

Procedure Func2()
	Debug "Das ist Funktion 2"
EndProcedure

Procedure FuncX()
	Debug "Das ist Funktion X"
EndProcedure

RegisterFunc("1", @Func1())
RegisterFunc("2", @Func2())
RegisterFunc("X", @FuncX())

For i = 1 To 2
	Func(Str(i))()
Next i 


Func("X")()
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Re: String auflösen

Beitrag von Skiller »

Da hab ich mich blöderweise nicht klar ausgedrückt /:->

Code: Alles auswählen

For i = 1 To n
  X.s = Str(i)
  RegisterFunc(X, @FuncX())  ;<---  @Func + X  + () ...oder ähnlich auflösen
  Func(X))()
Next i
Die Frage ist, ob man @Func ebenfallls auflösen kann, so dass man X als Zähler verwenden kann. Das hätte den Vorteil, die RegisterFunc()´s einzusparen.

Frohe Ostern... :lurk:
Gruß Skiller
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: String auflösen

Beitrag von cxAlex »

Skiller hat geschrieben:Die Frage ist, ob man @Func ebenfallls auflösen kann, so dass man X als Zähler verwenden kann. Das hätte den Vorteil, die RegisterFunc()´s einzusparen.

Frohe Ostern... :lurk:
Gruß Skiller
Nein. Alles hat Grenzen, und auch wenn man in PB viel mit Makros mehr oder weniger sinnvoll verdrehen kann ... das funktioniert (meines Wissens nach) nicht, btw. kann so nicht funktionieren. Man könnte das ganze natürlich mit einer weiteren Map/Array - Instanz koppel, die den anscheinen immer numerischen @Func{Index}() Index aufnimmt und mit ein, zwei weitern Macros könnte man's so hinbiegen das man dann wie gewohnt daruf zugreifen soll aber ich bezweifle das das noch irgendwie Sinnvoll ist.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Re: String auflösen

Beitrag von Skiller »

Wobei es schon eine gewisse Erleichterung gewesen wäre, sich die If´s bzw. select´s einzusparen.
Vielleicht doch mehr eine Frage der Ästhetik. <) Jedenfalls danke noch mal, dass Du uns Dein Wissen zur Verfügung gestellt hast.

Gruß Skiller
Benutzeravatar
Sicro
Beiträge: 969
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: String auflösen

Beitrag von Sicro »

Hallo Skiller,

am einfachsten wäre es ja, wenn du die Procedures in einer DLL auslagerst. So könntest du dann beim Aufrufen den Procedure-Name zusammenbasteln und aufrufen:

DLL:

Code: Alles auswählen

ProcedureDLL Funktion1()
  
EndProcedure

ProcedureDLL Funktion2()
  
EndProcedure

ProcedureDLL Funktion3()
  
EndProcedure
Programm:

Code: Alles auswählen

If OpenLibrary(0, "Procedures.dll")
  For i = 1 To 3
    CallFunction(0,"Funktion" + Str(i))
  Next
  
  CloseLibrary(0)
EndIf
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: String auflösen

Beitrag von NicTheQuick »

Da man den Procedures ja sowieso irgendwie Namen geben muss, könnte man das ganze auch mit einem Macro nochmal vereinfachen, sodass 'RegisterFunc' schon automatisch beim Erstellen einer Procedure aufgerufen wird.

Code: Alles auswählen

EnableExplicit
Define.b i
;------------------------------------
Prototype _Func()

Structure _Func_Dummy
	*_caller._Func
EndStructure

Global NewMap _Func._Func_Dummy()
;------------------------------------
Macro RegisterFunc(_Name, FunctionPointer)
	_Func(_Name)\_caller = FunctionPointer
EndMacro

Macro Func(_n)
	_Func(_n)\_caller
EndMacro

Macro ProcedureReg(name, number, type = i,)
	Declare.type name()
	RegisterFunc(number, @name())
	Procedure.type name()
EndMacro
	
;-------------------------------------
ProcedureReg(Func1, Str(1))
	Debug "Das ist Funktion 1"
EndProcedure

ProcedureReg(Func2, Str(2))
	Debug "Das ist Funktion 2"
EndProcedure

ProcedureReg(FuncX, "X")
	Debug "Das ist Funktion X"
EndProcedure

For i = 1 To 2
	Func(Str(i))()
Next i

Func("X")()
Antworten