Wert ist numerisch aber keine Zahl?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 10588
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Wert ist numerisch aber keine Zahl?

Beitrag von Stephan » Mi, 10.10.2018 22:49

Hallo,

kann mir bitte jemand erklären warum in Folgendem Makro-Beispiel die Zeile:

Code: Alles auswählen

If IsNumeric(ret) Then ret = VAL(ret)
zwingend ist? Ist IsNumeric nicht bereits der Beleg das es eine Zahl ist, das Verhalten ist hingegen ja so als wenn IsNumeric nur prüft das es eine Ziffer bzw. ein 'Zahlenstring' wäre?

Hinweis: In VBA läuft das Ganze auch ohne diese Zeile und konsequenterweise läuft das Ganze auch in OO ohne diese Zeile wenn im Kopf des Moduls die VBA-Kompatibilitätsoption (Option VBASupport 1) steht.

Code: Alles auswählen

Sub aufruf()
MsgBox Strasse("Ringstrasse 18-20")
End Sub

Function split_Strasse_HausNr(Adresse)
    Dim isNummer As Boolean
    Dim ret
 
    isNummer = False
    split_Strasse_HausNr = 0
 
    For i = Len(Adresse) To 1 Step -1
        ret = Mid(Adresse, i, 1)
        If IsNumeric(ret) Then ret = VAL(ret)
        Select Case ret
            Case 0 To 9
                isNummer = True
            Case " "
            Case "-"
            Case "/"
            Case Else
                If isNummer = True Then
                    split_Strasse_HausNr = i
                    Exit For
                End If
        End Select
    Next
End Function

Function Strasse(Adresse)
    x = split_Strasse_HausNr(Adresse)
    Strasse = Left(Adresse, x)
End Function

Gruß
Stephan

Toxitom
********
Beiträge: 3485
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Wert ist numerisch aber keine Zahl?

Beitrag von Toxitom » Do, 11.10.2018 08:15

Hallo Stephan,

die Zeile ist zwingend, soll alles korrekt funktionieren.

Es ist im übrigen nicht korrekt, dass das Ganze in VBA auch ohne diese Zeile läuft. Hab hier zwar kein VBA, aber über die Option "Option VBASupport 1" kommt nicht das korrekte Ergebnis raus, wenn Du die Zeile "If IsNumeric(ret) Then ret = VAL(ret)" auskommentierst und als Übergabewert wählst:
""Ringstrasse 18b".

isNumeric() prüft lediglich, ob der übergebene Ausdruck in eine gleichlautentde Zahl umgewandelt werden kann - also ob es sich um Ziffern handelt.

Die Umwandlung selbst erfolgt über die Val() Funktion (wobei ich hier wohl eher die CInt() - Funktion nehmen würde...)

Die Case Schleife benötigt als Entscheidungskriterium entweder einen String oder einen Wert - ich denke hier steckt die "Ungenauigkeit".

Für weitere Erkenntnisse musst Du selbst "graben"... zu wenig Zeit derzeit.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Stephan
********
Beiträge: 10588
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Wert ist numerisch aber keine Zahl?

Beitrag von Stephan » Do, 11.10.2018 08:48

Hallo Tom,
isNumeric() prüft lediglich, ob der übergebene Ausdruck in eine gleichlautentde Zahl umgewandelt werden kann - also ob es sich um Ziffern handelt.


Danke, das ist die (für mich) wichtige Info. Dessen war ich mir nicht bewusst.
Es ist im übrigen nicht korrekt, dass das Ganze in VBA auch ohne diese Zeile läuft. Hab hier zwar kein VBA, aber über die Option "Option VBASupport 1" kommt nicht das korrekte Ergebnis raus, wenn Du die Zeile "If IsNumeric(ret) Then ret = VAL(ret)" auskommentierst und als Übergabewert wählst:
""Ringstrasse 18b".
Das kann ich leider nicht nachvollziehen. Wenn ich den Code hier aus dem Forum heraus kopiere und die bewusste Zeile auskommentiere, läuft er in Excel 2003 ohne Probleme.
Füge ich "Option VBASupport 1" hinzu (bei weiterhin auskommentierter Zeile) läuft er auch unter AOO 4.1.5 und LO 5.1.6.

Alle 3 Dinge jeweils für "Ringstrasse 18b" als auch "Ringstrasse 18 b".

Probleme hingegen bei z.B. "Ringstrasse B-18", dessen bin ich mir aber bewusst. Überraschenderweise sagte mir:
https://dbwiki.net/wiki/VBA_Tipp:_Stra% ... xtrahieren

bereits gestern, das es garkeine 100%ige Lösung für beliebige Straße+Hausnummer-Kombinationen geben soll, ich weiß aber garnicht was dabei in Praxis für Straße+Hausnummer alles vorkommen kann.


Gruß
Stephan

Toxitom
********
Beiträge: 3485
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Wert ist numerisch aber keine Zahl?

Beitrag von Toxitom » Do, 11.10.2018 08:58

Hey Stephan,
Das kann ich leider nicht nachvollziehen. Wenn ich den Code hier aus dem Forum heraus kopiere und die bewusste Zeile auskommentiere, läuft er in Excel 2003 ohne Probleme.
Füge ich "Option VBASupport 1" hinzu (bei weiterhin auskommentierter Zeile) läuft er auch unter AOO 4.1.5 und LO 5.1.6.
Sicher? hier das bild bei mir : Win 10, LO 5.3.1

Zwischenablage01.png
Zwischenablage01.png (29.94 KiB) 302 mal betrachtet
VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Stephan
********
Beiträge: 10588
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Wert ist numerisch aber keine Zahl?

Beitrag von Stephan » Do, 11.10.2018 10:43

ja, es funktioniert hier mit 5.1.6 (Windows 7). Ebenso funktioniert es mit LO 6.0.3.


Gruß
Stephan
Dateianhänge
Makro.gif
Makro.gif (69.12 KiB) 283 mal betrachtet

Antworten