Prozedur - Return mit verschiedenen Typen String/Int

Anfängerfragen zum Programmieren mit PureBasic.
joebusch
Beiträge: 6
Registriert: 21.12.2014 17:09

Prozedur - Return mit verschiedenen Typen String/Int

Beitrag von joebusch »

Mojen,
ich versuche eine Funktion zu schreiben , bei der entweder eine Zahl oder ein String zurückkommt.
Die Hilfe ist da ein bischen dürftig , deswegen stehe ich hier einigermassen auf dem Schlauch.
Unter AutoIt hatte ich damit ja (leider ?) nichts zu tun.
Müsste ich die Zahl in einen String umwandeln ? Um sie dann aber wieder woanders einzuspeisen, muss
sie wieder zurück konvertiert werden ?

Dazu noch eine kleine extra Frage, kann Select wirklich nur mit Zahlen hantieren ? Is das nicht ein wenig dürftig ?
Für Stringvergleiche/Selektionen müsste ich mich dann in If Orgien ergehen ?
Ich harre der Beiträge ... :roll:

Code: Alles auswählen

Procedure ListGetAktiveItem(RcType.s = "Txt")
    Debug "Liste"
    ItemId = GetGadgetState(EventGadget())
    ItemTxt.s = GetGadgetItemText(EventGadget(),ItemId,0)    
    Debug "ListDoubleKlick " +  Itemtxt
    If RcType = "Txt" 
      ProcedureReturn ItemTxt
    EndIf
    If RcType = "Id"
        ProcedureReturn  Item
    EndIf 
      
  EndProcedure  
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Prozedur - Return mit verschiedenen Typen String/Int

Beitrag von NicTheQuick »

Eine Procedure kann nur jeweils einen Datentyp zurückgeben. Also entweder einen String oder einen Zahlentyp.
'Select' kommt auch mit Strings zurecht:

Code: Alles auswählen

s.s = "hallo"
Select s
	Case "hallo" 
		Debug "Hallo auch"
	Case "tschüss"
		Debug "Bis dann"
	Default
		Debug "Ich weiß nicht, was du mir sagen willst."
EndSelect
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Prozedur - Return mit verschiedenen Typen String/Int

Beitrag von STARGÅTE »

Eine Prozedur wird kompiliert und somit ist es nicht möglich verschiedene Return-Typen zu vergeben, da ja ganz andere Register der CPU genutzt werden.
Somit zwei verschiedene Proceduren schreiben.

Du kannst ja eh nicht zur Leufzeit zwischen beiden Rückgabetypen wechseln, da ja der umgebene Code auch am Syntax für Nummern oder eben String gebunden ist.

Select kann auch mit Strings arbeiten:

Code: Alles auswählen

Select String
  Case "Alpha"
  Case "Beta"
EndSelect
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
joebusch
Beiträge: 6
Registriert: 21.12.2014 17:09

Re: Prozedur - Return mit verschiedenen Typen String/Int

Beitrag von joebusch »

Danke, es wörkt :allright:
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Prozedur - Return mit verschiedenen Typen String/Int

Beitrag von Bisonte »

Es würde evt. auch so gehen :

Code: Alles auswählen

Structure s_activeItem
  Gadget.i
  ItemID.i
  ItemText.s
EndStructure

Procedure ListGetActiveItem(*var.s_activeItem)
  
  If *var
    *var\Gadget = EventGadget()
    *var\ItemID = GetGadgetState(*var\Gadget)
    *var\ItemText = GetGadgetItemText(*var\Gadget, *var\ItemID, 0)
    ProcedureReturn #True  
  EndIf
  
  ProcedureReturn #False
  
EndProcedure

Define AktivesGadget.s_activeItem

;: Aufruf

If ListGetActiveItem(@AktivesGadget) ; <- Hier wird der Speicher der Variablen übergeben. Beachte @ am Anfang des VariablenNamen
  Debug "Text : " + AktivesGadget\ItemText
  Debug "ID   : " + Str(AktivesGadget\ItemID)
  Debug "Es war Gadget : " + Str(AktivesGadget\Gadget)
EndIf
Der Prozedur muss dann halt nur die Speicheradresse der Variablen übergeben werden.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten