German Variable wird nicht akzeptiert

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo,

ich bin wieder mal am experimentieren :)

Daten vom Gerät kommen als String.

B4X:
Dim KomendeDaten As String
Dim OUTPUT1 As String

OUTPUT1 = Bit.ToBinaryString(KomendeDaten)
bekomme Fehlermeldung:
"java.lang.NumberException: Invalid double:""
was soll ich da machen?

PS: auch bereits versucht, immer noch fehler
Dim OUTPUT1 As Long
Dim OUTPUT1 As Double
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
Klappt nicht, wenn KomendeDaten ein Leerstring ist!
 

thetahsk

Active Member
Licensed User
Longtime User
Fehlermeldung passt nicht, bei Leerstring müsste eigentlich eine
..java.lang.NumberFormatException: empty String.. Exception kommen.
 

OliverA

Expert
Licensed User
Longtime User
KomendeDaten muss ein INT enthalten (in String Format). Falls KomendeDaten ein Punkt hat oder irgendwas wo Java denkt KomendeDaten ist kein INT, dann, in diesem Fall, umwandelt Java KomendeDaten zu ein Doppel. Versuche:

B4X:
Dim KomendeDaten As String
Dim OUTPUT1 As String
Dim myInt as Int = KomendeDaten
OUTPUT1 = Bit.ToBinaryString(myInt)
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Dim KomendeDaten As String
Dim OUTPUT1 As String
Dim myInt as Int = KomendeDaten
OUTPUT1 =
Bit.ToBinaryString(myInt)

so hat es geklappt, aber warum kann man hier nicht casten? wie in VB.NET CSTR usw.?
 

MarkusR

Well-Known Member
Licensed User
Longtime User
sowas wie Val(String) oder KomendeDaten.ToInt wäre toll oder (Int)KomendeDaten oder =Int(KomendeDaten)
Das Val in VB6 war sehr gut, mini Funktionen die man immer braucht sollten keine Fehler werfen. Sowas wie "AX" wurde einfach als 0 zurück gegeben.
Zudem hatte VB6 IsNumeric(..)

Eine automatische Umwandlung ist nicht gut, wenn dann muss sowas optional sein.

Du kannst Dir einfach ein Modul machen und eine Sub die das umwandelt.
https://www.b4x.com/android/forum/threads/wish-val-string.7663/#content
Ich finde es auch blöd das man über solche Dinge stolpern muß.
 
Last edited:

OliverA

Expert
Licensed User
Longtime User
Zudem hatte VB6 IsNumeric
Hat auch B4X (IsNumber). Nur, IsNumber can auch double sein und wuerde in diesem fall nicht helfen.
[sarcasm]
Ich finde es blöde das VB6 keine iOS, Android, Linux, MacOS, embedded Programme herstellen kann.
[/sarcasm]
 

pucki

Active Member
Licensed User
Longtime User
Kleiner Tipp am Rande. Du solltest Daten vor Umwandlung Grundsätzlich immer auf Gültigkeit prüfen. Sonst kann es zu bösen Fehlern führen. Ich weiß jetzt nicht wie dein Code reagiert wenn "kommendeDaten" = nix ist.

Eine mid-Anweisung in VB mit einen Leer-String führt nämlich auch zu ein Fehler. ;) Nur mal so als Beispiel.

Gruß

Pucki
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Eine mid-Anweisung in VB mit einen Leer-String führt nämlich auch zu ein Fehler.

das stimmt nicht: vb6
B4X:
Dim a$
    a$ = ""
    
    Debug.Print Mid$("", 1, 100)
    Debug.Print "geht"
 

pucki

Active Member
Licensed User
Longtime User
Auf die Kleinigkeiten kommt es an ;) Ich habe MID geschrieben. OHNE $

In VB 2010 oder höher gibt es den String-Befehl nicht mehr. Da sind auch die Befehle(genauer gesagt Funktionen) Left$, Right$, und String$ weggefallen. Ich musste mir dafür eine extra DLL schreiben.

vb6.0 was viel genügsamer und hat vieles verziehen.

Gruß

Pucki
 

MarkusR

Well-Known Member
Licensed User
Longtime User
OT
[sarcasm]
Ich finde es blöde das VB6 keine iOS, Android, Linux, MacOS, embedded Programme herstellen kann.
[/sarcasm]

Wäre das GUI ein Teil der Programmiersprache ist das gar kein Problem. Hatte MS nur kein Interesse dran.
Siehe FireMonkey bei Delphi.
 

pucki

Active Member
Licensed User
Longtime User
Die letzte "Fremdsystem" was man mit VB programmieren konnte, was ein Plug-in in VB6.0 für VB-CE. Hab ich auch mal mit gecodet. Für einen Pocket-PC (Das waren die Vorgänger von Handy ohne Telefonieren ;) )

Gruß

Pucki
 

Kiffi

Well-Known Member
Licensed User
Longtime User
In VB 2010 oder höher gibt es den String-Befehl nicht mehr. Da sind auch die Befehle(genauer gesagt Funktionen) Left$, Right$, und String$ weggefallen. Ich musste mir dafür eine extra DLL schreiben.
Die alten VB6-Befehle Left, Right und Mid (ohne '$') befinden sich im Namespace Microsoft.VisualBasic.

Und A = String$(40,"x") ist äquivalent zu A = New String("x"c, 40)

Grüße ... Peter
 

pucki

Active Member
Licensed User
Longtime User
Die alten VB6-Befehle Left, Right und Mid (ohne '$') befinden sich im Namespace Microsoft.VisualBasic.

Weiß ich. Aber diese Namespace sind zu überlastet. Für 3 kleine Funktionen den gesamten Namespace einzubinden fand ich übertrieben. Also habe ich einfach eine Dll Geschrieben die eingebunden und da sind alle Funktionen (String und spezielle Ersetzungsfunktionen) und Frames (Anständige Msg-Box z.b) drin, die ich dauernd aufrufe. Das DLL-chen ist dabei nicht mal 50 k groß.

Gruß

Pucki
 

MarkusR

Well-Known Member
Licensed User
Longtime User
OT
Auf die Kleinigkeiten kommt es an ;) Ich habe MID geschrieben. OHNE $

Das geht auch, aber der Parameter kann dann ein Objekt sein.
Aber allgemein waren viele MS Funktionen sehr kritisch und Fehler anfällig
das man sich oft eine eigene Funktion drum herum schreiben mußte die nicht für alles nervt.
B4X:
'VB6
Dim a$
    a$ = ""
 
    Debug.Print Mid("", 1, 100)
    Debug.Print "geht"
 
Last edited:

pucki

Active Member
Licensed User
Longtime User
ok ich hab nach geguckt wieso ich ein Fehler habe. Ich übergebe an die Funktion so gut wie nie ein echten Startwert sondern immer eine Variable (int). Und wenn die kleiner 0 ist, knallt es.

Gruß

Pucki
 

MarkusR

Well-Known Member
Licensed User
Longtime User
ok ich hab nach geguckt wieso ich ein Fehler habe. Ich übergebe an die Funktion so gut wie nie ein echten Startwert sondern immer eine Variable (int). Und wenn die kleiner 0 ist, knallt es.
Ja diese Meldung finde ich noch ok weil ein String ja nur 1-X sein kann.
Hätte man den Wert seitens MS korrigiert auf Min-Max wäre es manipulation das hätte ich dann nicht gut heissen können.
Allerdings wäre ja eine Debug Meldung als Warnung besser als eine Fehler Meldung die das Programm ohne Fehlerbehandlung ja abkacken läßt.
 
Top