Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

SUB-Parameterliste mit selbstdefinierten Operatoren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 101

BeitragVerfasst am: 30.05.2024, 14:38    Titel: SUB-Parameterliste mit selbstdefinierten Operatoren Antworten mit Zitat

=> Wie kann man die Parameterliste von SUBs so manipulieren, dass wie bei PRINT ein "," und ";" in der Parameterliste eine neuartige Funktion erfüllen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1283
Wohnort: Ruhrpott

BeitragVerfasst am: 30.05.2024, 18:56    Titel: Antworten mit Zitat

Könntest du etwas genauer beschreiben, was du vorhast? In der Parameterliste dient das Komma als Separator, und das Smikolon ist überhaupt nicht erlaubt und produziert eine Fehlermeldung.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2530
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 30.05.2024, 21:52    Titel: Antworten mit Zitat

Folgendes geht noch am ehesten in diese Richtung:

https://www.freebasic.net/wiki/KeyPgOperator

Man kann die Operatoren für Rechenausdrücke überladen und so Dinge wie beispielsweise eine Klasse für komplexe Zahlen oder Vektoren programmieren, mit der man dann normale Ausdrücke schreiben kann.

Bei C++ wäre sogar das Komma ein meines Wissens überladbarer Operator, was bei FB nicht der Fall ist. Die Syntax von PRINT stammt so betrachtet noch als Rückwärtskompatibiltäts-Relikt aus der alten GWBASC/QBASIC-Zeit.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 116

BeitragVerfasst am: 31.05.2024, 00:25    Titel: Antworten mit Zitat

Die Frage finde ich auch interessant. Ich vermute, dass das der Parser beim Kompilieren erledigt. Es wird geprüft, ob Komma oder Semikolon nach der Print Anweisung folgt und dann wird die Anweisung entsprechend umgestellt.
Für eigenes Programmieren muss man mit dem zufrieden sein, was FreeBasic bietet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 101

BeitragVerfasst am: 31.05.2024, 00:35    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Könntest du etwas genauer beschreiben, was du vorhast? In der Parameterliste dient das Komma als Separator, und das Semikolon ist überhaupt nicht erlaubt und produziert eine Fehlermeldung.

Nun, bei PRINT eben nicht. Und ich bräucht's für ne eigene PRINT-Funktion. Mit Komma zwischen den Ausdrücken erzeugt man Tabsprünge, mit Semikolon eine Verkettung von Ausdrücken. Steht ein Semikolon am Zeilenende, wird der Zeilenumbruch unterdrückt.

Offensichtlich handelt es sich um eine variable Parameterliste, zumindest kann man quasi beliebig viele Parameter hintereinanderreihen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hhr



Anmeldungsdatum: 15.07.2020
Beiträge: 116

BeitragVerfasst am: 31.05.2024, 01:02    Titel: Antworten mit Zitat

Vielleicht könnte printf weiterhelfen, das man mit crt.bi einbauen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4710
Wohnort: ~/

BeitragVerfasst am: 31.05.2024, 14:24    Titel: Antworten mit Zitat

PRINT (und INPUT) arbeiten nicht mit variabler Parameterliste, sondern werden eigens geparst. Es gibt noch ein paar andere Besonderheiten, die nur in speziellen Befehlen existieren und sich nicht anderweitig nachbauen lassen - Koordinatenangaben über ein Zweiertupel zum Beispiel, oder die aus meiner Sicht mit ihrer Syntax ziemlich aus dem Rahmen fallende MID-Anweisung (deren Nutzen sehr überschaubar ist). Selbstgebaute Parameterlisten arbeiten ausschließlich mit Komma - außer du baust dir einen eigenen Präprozessor, der die Quelldatei passend vorbearbeitet und dann erst an den Compiler schickt. Der Präprozessor könnte dann die , durch ein !"\t" ersetzen und die ; durch ein , (oder so etwas in der Art). Compilieren geht dann halt nur mithilfe dieses Präprozessors.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Matthias
Gast





BeitragVerfasst am: 17.07.2025, 08:58    Titel: Antworten mit Zitat

Das ist eine interessante Frage! In VBA kann man die Parameterliste von Subs nicht direkt so verändern, dass Komma oder Semikolon eine andere Bedeutung bekommen, wie bei PRINT. Eine Möglichkeit ist, ParamArray zu verwenden, womit man eine flexible Anzahl von Argumenten entgegennehmen kann. Innerhalb des Subs kannst du dann selbst definieren, wie du diese Werte verarbeitest, z. B. spezielle Werte als Steuerzeichen interpretieren. Für komplexere Parser-Funktionalitäten wäre aber eventuell eine eigene Funktion sinnvoller.
Nach oben
Monika



Anmeldungsdatum: 03.07.2025
Beiträge: 9

BeitragVerfasst am: 13.10.2025, 18:07    Titel: Antworten mit Zitat

Das direkte Manipulieren der Parametertrennung mit "," und ";" wie bei PRINT ist bei eigenen SUBs in BASIC leider nicht möglich, weil die Parameterübergabe festgelegt ist. Als Workaround könntest du alle Argumente als einen String übergeben und dann innerhalb des SUBs selbst parsen oder eine ParamArray-Lösung nutzen, falls die Sprache es unterstützt. Eine andere Möglichkeit wäre, spezielle Trennzeichen zu verwenden und diese im SUB auszuwerten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 101

BeitragVerfasst am: 13.10.2025, 22:45    Titel: Antworten mit Zitat

Momentan ist es so: ich benutz' für meine Retrogra-Konsole den Befehl rgPRINT, z.B.:

Code:

rgPRINT AT(20,15)+ESC("A")+"Hallo Darkmode !"+ESC("a")

Es wär' halt optimal, wenn man 1. den PRINT-Befehl überschreiben könnte, sobald rgSCREENNEW erfolgreich seine Canvas erzeugt hat. Natürlich auch PRINT wieder zurückgelenkt werden kann bzw. umgelenkt, indem man eben dessen Adresse in einer Variable speichert, in etwa:
Code:

STDOUT=@PRINT
STDOUT "Hier nochmal für das Log:"


2. sollte man Obiges so schreiben können:
Code:

PRINT AT(20,15);ESC("A)";"Hallo Darkmode !";ESC("a");

wobei man mit den Semikola ja auch numerische Werte einschieben könnte, dazu braucht man derzeit z.B. ""+STR(i)+"", also:
Code:

rgPRINT "i ist "+STR(i)+", j ist "+STR(j)
statt
rgPRINT "i ist";i;", j ist ";j


rgPRINT fügt auch noch keinen Zeilenumbruch ein, da müsste man immer ein "+CRLF" anhängen oder eine zusätzliche Zeile "rgPRINT". Bei BASIC ist es meistens so, dass man bei PRINT automatisch einen Zeilenumbruch hat, und diesen mit einem Semikolon am Ende unterdrückt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Monika



Anmeldungsdatum: 03.07.2025
Beiträge: 9

BeitragVerfasst am: 14.10.2025, 16:58    Titel: Antworten mit Zitat

Das direkte Manipulieren der Parametertrennung mit "," und ";" wie bei PRINT ist bei eigenen SUBs in BASIC leider nicht möglich, weil die Parameterübergabe festgelegt ist. Als Workaround könntest du alle Argumente als einen String übergeben und dann innerhalb des SUBs selbst parsen oder eine ParamArray-Lösung nutzen, falls die Sprache es unterstützt. Eine andere Möglichkeit wäre, spezielle Trennzeichen zu verwenden und diese im SUB auszuwerten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 101

BeitragVerfasst am: 14.10.2025, 17:54    Titel: Antworten mit Zitat

Prinzipiell ist es in BASIC schon möglich, nur nicht in FreeBASIC und vermutlich in gar keinem existierenden BASIC-Dialekt. Man müsste es halt im Compiler/Interpreter implementieren. FreeBASIC bietet ja schon Möglichkeiten, die es teilweise in fast keinem BASIC-Dialekt gibt. Die Fragestellung war ja letztlich, OB man da irgendwas tricksen kann. IIRC hab' ich's bereits den Entwicklern vorgeschlagen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz