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:

Wert in String umwandeln, für beliebigen Datentyp

 
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
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 21.05.2006, 09:45    Titel: Wert in String umwandeln, für beliebigen Datentyp Antworten mit Zitat

Hallo,

ich bin gerade dabei, mein QBasic-Prog zu FB umzuschreiben.
Die Funktion STR$(wert) von QBasic gibt positive Werte ja bekanntlich mit führendem Leerzeichen zurück, bei FB ohne. Jetzt habe ich mir eine Funktion geschrieben, die das fehlende Leerzeichen wieder einfügt, weil der folgende Code ja von den Leerzeichen ausgeht.

Nun meine Frage:
Wie schaffe ich es, dass ich an die qb_str$ jeden beliebigen Datentyp (INTEGR, SINGLE, was auch immer) übergeben kann (bei STR$ von QB geht das ja auch!), und der entsprechende Datentyp dann aber auch in der Funktion erkannt wird und nicht so ein Müll als String zurückgegeben wird wie " 1.387285e-043", wenn ich ne "99" als INTEGER übergebe.



Hier mal der Code:

DEFSNG a-z 'Nicht deklarierte Variablen als SINGLE (wie in QBasic)
DECLARE FUNCTION qb_str$ (AS ANY)
t = 100.123
t% = 99
PRINT qb_str$(t) 'Gibt " 100.123" aus, brav!
PRINT qb_str$(t%) 'Soll " 99" ausgeben, nicht " 1.387285e-043" !
SLEEP
END

'Wandelt Wert in Text um (MIT fuehrendem Leerzeichen, falls positiv)
'(Entspricht STR$ in QBasic)

FUNCTION qb_str$ (wert)
s$ = STR$(wert)
IF LEFT$(s$, 1) <> "-" THEN s$ = " " + s$
qb_str$ = s$
END FUNCTION


Kurz gesagt: Ich brauch ne Funktion, die exakt so funktioniert, wie die STR$ unter QB. Ideen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 21.05.2006, 10:39    Titel: Antworten mit Zitat

Schlechte Qualität, aber provischorisch sollte es gehen:
Code:
#Define qb_str$(wert)   (space((left(str$(wert),1)="-")+2)+str$(wert))

DEFSNG a-z 'Nicht deklarierte Variablen als SINGLE (wie in QBasic)
'DECLARE FUNCTION qb_str$ (AS ANY)
t = 100.123
t% = 99

PRINT qb_str$(t) 'Gibt " 100.123" aus, brav!
PRINT qb_str$(t%) 'Soll " 99" ausgeben, nicht " 1.387285e-043" !

t = -100.123
t% = -99

PRINT qb_str$(t)
PRINT qb_str$(t%)

SLEEP
END

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 21.05.2006, 12:26    Titel: Antworten mit Zitat

ansonsten könnte man auch versuchen, mit http://format.freebasic.de dranzugehen..
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 21.05.2006, 12:50    Titel: Antworten mit Zitat

Dumme Idee:
Wahrscheinlich sind deine Integer Werte nicht Unbedingt gross (die gute alte 16 Bit Integer Variabel, Freebasic hat ja 32 Bit).
Code:
Declare function QB_Str2$(Wert as Double)
#Define QB_Str$(Wert) QB_Str2(cdbl(Wert))
#

DEFSNG a-z 'Nicht deklarierte Variablen als SINGLE (wie in QBasic)

t = 100.123
t% = 99

PRINT qb_str$(t)
PRINT qb_str$(t%)

t = -100.123
t% = -99

PRINT qb_str$(t)
PRINT qb_str$(t%)

SLEEP
END


function QB_Str2$(Wert as Double)
    QB_Str2$=space$(BIT(Wert, 63)+2)+str$(wert)
end function

mit dem Kopf durch die Mauer wollen
Code:
Declare function QB_Str2$(Wert as single)
#Define QB_Str$(Wert) QB_Str2(csng(Wert))

DEFSNG a-z 'Nicht deklarierte Variablen als SINGLE (wie in QBasic)

t = 100.123
t% = 99

PRINT qb_str$(t) 'Gibt " 100.123" aus, brav!
PRINT qb_str$(t%)

t = -100.123
t% = -99

PRINT qb_str$(t)
PRINT qb_str$(t%)

SLEEP
END

function QB_Str2$(Wert as single)
    QB_Str2$=space$(BIT(Wert, 31)+2)+str$(wert)
end function

Sieht schon besser aus.
Hier muss man einfach sehr Vorsichttig sein bei grossen Integer Werten.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 21.05.2006, 17:42    Titel: Antworten mit Zitat

Was du brauchst ist das Schlüsselwort OVERLOAD:

http://www.freebasic.de/r.php?s=OVERLOAD

Damit kannst du dann mehrere FUNCs mit dem selben Namen schreiben, die sich nur um einen Parameter unterscheiden müssen.

Du kannst dann also so etwas machen wie

Code:
Declare Function qb_Str$ Overload (Wert As Integer) As String
Declare Function qb_Str$ (Wert As Single) As String)

....

Function qb_Str$(Wert As Integer) As String
...
End Function

Function qb_Str$(Wert As Single) As String
...
End Function


Ich würde dir aber die Makro-Methode empfehlen, da du so nur eine Zeile brauchst anstelle der mindestens 3 Zeilen pro Func...


However, das Schlüsselwort kann nützlich sein, schau's dir also auf jeden Fall an!


Have a nice day
Ciao
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 21.05.2006, 23:13    Titel: Antworten mit Zitat

Ich danke euch allen, hab mich für die OVELOAD-Variante entschieden.
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