Identify-Funktion

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Chrise

Betreff: Identify-Funktion

BeitragSo, März 07, 2010 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich weiß jetzt nicht, ob das als ein "Einzeiler" zählt. Zumindest finde ich folgende Funktion ganz nützlich. Vorallem für Write-befehle, die man in der selben Funktion immer wieder anwenden muss.

Die FUnktion findet heraus welcher Typ die Variable ist.
1=Byte
2=Short
3=Integer
4=Float
5=String

Function mit kleinem Beispiel:
BlitzBasic: [AUSKLAPPEN]


Print Identify(244)
Print Identify(24445)
Print Identify(256455)
Print Identify(20.459232)
Print Identify("2.e+010")
Print Identify("2.0 hallo")

WaitKey
End

Function Identify(Value$)
Local IntValue=Int(Value$)
If Str(IntValue)=Value$ Then
If IntValue<256 Then
Return 1
Else If IntValue<65536 Then
Return 2
Else
Return 3
EndIf
Else If Str(Float(Value$))=Value$ Then
Return 4
Else
Return 5
EndIf
End Function
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Xeres

Moderator

BeitragSo, März 07, 2010 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage: Wozu setzt man das in der Praxis ein?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Chrise

BeitragSo, März 07, 2010 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Frage: Wozu setzt man das in der Praxis ein?


wenn du zum Beispiel eine Funktion schreibst, die in eine Bank bestimmt werte einspeichert. In dem Fall kannst du den Typ der Variable bestimmen und damit Speicherplatz sparen. Indem du statt WriteInt dann WriteByte/Short benutzen lässt.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Xeres

Moderator

BeitragSo, März 07, 2010 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja schon - aber um den richtigen Wert wieder heraus zu bekommen, muss ich dann Position bzw. Typ irgendwo abspeichern. Bleibt am Ende der Verwaltung des ganzen noch ein "Gewinn" übrig?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 07, 2010 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will nicht mekern, aber in eine Bank schreibt man in geordneter Reihenfolge. Das heisst, wenn ich beispielsweise Integer wegen den großen Zahlenraum benötige, aber nun einen Wert von '10' schreiben möchte, ist es Unsinnig auf WriteByte auszuweichen. Auch wenn man nun drei Bytes einspart, spätestens beim auslesen hat man dann das Problem, da die Daten nicht geordnet vorliegen.

Wäre von daher gut zu wissen, wie man schnell herausfinden könnte, an welcher Stelle sich die eine Zahl zum auslesen nun befindet?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Chrise

BeitragSo, März 07, 2010 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bisher bleibt ein Gewinn bei Shorts und Bytes. Wobei ich noch sagen muss:
Man könnte ja ansich auch einfach jeden Wert als String speichern. Das würde aber dann bei einem Intergerwert wie beispielsweise 2384239 schon 4+7 also 11 Bytes ergeben! Wäre somit also um 7 Bytes größer als in mit Writeint zu schreiben.
Das ganze ist natürlich nur sinnvoll wenn oft diese Fälle eintreten können.

@hectic: guter Einwand. Die Funktion scheint nur in ganz speziellen Fällen nützlich zu sein. (Wobei in einigen meiner Projekte die Funktion als sinnvoll erscheint)
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 07, 2010 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, mein zweiter Absatz war eher als Frage gestellt. Wie stellst du sicher, wo eine Bytefolge an welcher Stelle abtrennt?

Folgende Ausgangssituation mit 8 Byte in Folge: HEX-Code: [AUSKLAPPEN]
FFEEDDCCBBAA9988


Wo ist nun für dich die Grenze?

Sind es 8*Bytes
Sind es 4*Shorts
Oder 2*Integer?

Oder vielleicht auch noch eine Kombination aus allen zusammen?

was machst du, wenn du weißt, dass in dieser Bytefolge 3 Werte enthalten sind?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Chrise

BeitragSo, März 07, 2010 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das ginge natürlich nicht. Mit der Funktion meinte ich jetzt auch keine "Raster" wo man 4 Werte gespeichert hat und alle in beliebiger Reihenfolge auslesen kann. Eher so, dass man alle nacheinander ausliest und eventuell ein Kennungsbyte davor hat.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group