wie kann ich den numerischen Anteil (befindet sich immer rechts) aus einem
String auslesen.
Das Problem ist, das der numerische Anteil 1 bis 5 Stellen haben kann, z.B.
....D:13 oder H:2333.
Vor dem numerischen Anteil befindet sich immer ein Doppelpunkt, kann ich das
irgendwie ausnutzen?
Mit freundlichen Grüßen
Hauke Krause
Hallo Hauke,
> wie kann ich den numerischen Anteil (befindet sich immer rechts)
> aus einem String auslesen.
> Das Problem ist, das der numerische Anteil 1 bis 5 Stellen haben
> kann, z.B. ....D:13 oder H:2333.
> Vor dem numerischen Anteil befindet sich immer ein Doppelpunkt,
> kann ich das irgendwie ausnutzen?
Na klar kannst Du das.
Angenommen, es gibt nur einen Doppelpunkt in diesem String:
' ----
Dim iPos as Integer
Dim sString as String
Dim iZahlen as Integer
iZahlen = 0
sString ="H:2333"
iPos = instr(1, sString, ":")
if iPos > 0 then
iZahlen = Val(right$(sString, len(sString) - iPos))
end if
' ----
Wenn es mehrere Doppelpunkte geben kann, musst Du mit InstRev
dran, da kannst Du den String von hinten durchsuchen.
Ansonsten funktioniert mein Code wohl, wenn Du noch Fragen
haben solltest, immer her damit :-)
Philipp
[...]
>
> InStr oder Split duerften Dir als moegliche Ansaetze helfen koennen.
[...]
...haben mir geholfen. Vielen Dank für die superschnelle Antwort (1min).
Hast Du einen automatischen Anfragenbeantworter? ;-)
Hauke Krause
Hallo Hauke!
Die erste Zahl in einem String erhälst Du z.B. durch folgende Funktion:
<snip>
Private Function ErsteZahl(strInput As String)
Dim strAktual As String
Dim intA, intB As Integer 'Anfang und Ende
Do
intA = intA + 1
strAktual = Mid(strInput, intA, 1)
Loop Until IsNumeric(strAktual)
Do
intB = intB + 1
strAktual = Mid(strInput, intA, intB)
Loop Until Not IsNumeric(strAktual)
intB = intB - 1
ErsteZahl = Val(Mid(strInput, intA, intB))
End Function
</snip>
Aufruf ErsteZahl("ejrh:4587.3nochwas") ergibt: 4587.3!
Wenn's nicht unbedingt die erste Zahl is:
<snip>
Private Function ErsteZahlNach(strInput As String, strNach As String)
Dim strAktual As String
Dim intA, intB As Integer 'Anfang und Ende
Do
intA = intA + 1
Loop Until Mid(strInput, intA, Len(strNach)) = strNach _
And IsNumeric(Mid(strInput, intA + 1, 1))
Do
intA = intA + 1
strAktual = Mid(strInput, intA, 1)
Loop Until IsNumeric(strAktual)
Do
intB = intB + 1
strAktual = Mid(strInput, intA, intB)
Loop Until Not IsNumeric(strAktual)
intB = intB - 1
ErsteZahlNach = Val(Mid(strInput, intA, intB))
End Function
</snip>
Aufruf dann: ErsteZahlNach("ewjhf7456ksdjfh:4765.7undnochmehr",":"),
was 4765.7 ergibt! Hope it helps,
felix
--
felix_eckhofer * fe...@tribut.de * ICQ#_59008162
"In der EDV gilt die eiserne Grundregel 2 + 2 = 4,
wobei '=' für 'manchmal, wenn überhaupt' steht!"
auch Dir vielen Dank für Deine Antwort.
Vielleicht kannst Du mir noch erklären, worin sich bei der InStr-Funkt. die
Vergleichsargumente vbBinaryCompare und vbTextCompare unterscheiden, bzw.
spielen die in meinem Fall überhaupt eine Rolle?
Hauke
[...]
vielen Dank für Deine Hilfe, Du hast ja wohl alle Eventualitäten
berücksichtig.
Da in meinem String jeweils nur eine Zahl vorkommt und das regelmäßig nach
einem Doppelpunkt, reicht für meine Zwecke:
Val(Right(MyString,InStr(1,MyString,":",vbTextCompare)))
Gruß
Hauke
> auch Dir vielen Dank für Deine Antwort.
Gern geschehen.
> Vielleicht kannst Du mir noch erklären, worin sich bei der
InStr-Funkt. die
> Vergleichsargumente vbBinaryCompare und vbTextCompare unterscheiden,
vbUseCompareOption
------------------------
Performs a comparison using the setting of the Option Compare statement.
vbBinaryCompare
------------------------
Performs a binary comparison.
vbTextCompare
------------------------
Performs a textual comparison.
vbDatabaseCompare
------------------------
For Microsoft Access (Windows only), performs a comparison based on
information contained in your database.
> bzw. spielen die in meinem Fall überhaupt eine Rolle?
Nicht wirklich.
Philipp
> Val(Right(MyString,InStr(1,MyString,":",vbTextCompare)))
Wobei Du das "vbTextCompare" weglassen kannst.
Philipp
Hauke
> Val(Right(MyString, Len(MyString)-InStr(1,MyString,":")))
Nur als Anmerkung sei mal an die $-Funktionen erinnert. Right() liefert
einen Variant zurück der erst implizit in einen String umgewandelt werdem
muß, weil Val() einen String erwartet. Die Funktion Right$() macht dasselbe
wie Right(), nur liefert die $-Version gleich einen String zurück. Es muß
also nicht noch eine implizite Konvertierung von Variant nach String
vorgenommen werden.
Bis denn dann,
Frank
--
Wisdom starts where knowledge ends - Rage (Ghosts-1999)
> > Vielleicht kannst Du mir noch erklären, worin sich bei der
> InStr-Funkt. die
> > Vergleichsargumente vbBinaryCompare und vbTextCompare unterscheiden,
>
> vbUseCompareOption
> ------------------------
> Performs a comparison using the setting of the Option Compare statement.
> vbBinaryCompare
> ------------------------
> Performs a binary comparison.
Es geht doch nichts über eine gute, aussagekräftige Erläuterung ;-))
> vbTextCompare
> ------------------------
> Performs a textual comparison.
dito.
Gruß
Christian