Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Numerischer Anteil einer String - Variablen

17 views
Skip to first unread message

Hauke Krause

unread,
Jan 11, 2001, 3:54:28 PM1/11/01
to
Liebe NG,

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


Philipp Pries

unread,
Jan 11, 2001, 4:04:34 PM1/11/01
to
"Hauke Krause" <hauke....@t-online.de> schrieb im Newsbeitrag
news:93l65r$kbg$07$1...@news.t-online.com...

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


Hauke Krause

unread,
Jan 11, 2001, 4:30:14 PM1/11/01
to
Hallo Mathias,

[...]
>
> 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


Felix Eckhofer

unread,
Jan 11, 2001, 4:28:48 PM1/11/01
to
In article <93l65r$kbg$07$1...@news.t-online.com>, hauke....@t-online.de
says...

> Liebe NG,
>
> 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?

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!"

Hauke Krause

unread,
Jan 11, 2001, 4:43:56 PM1/11/01
to
Hallo Philipp,

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

[...]

Hauke Krause

unread,
Jan 11, 2001, 5:10:11 PM1/11/01
to
Hallo Felix,

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


Philipp Pries

unread,
Jan 11, 2001, 5:26:54 PM1/11/01
to
"Hauke Krause" <hauke....@t-online.de> schrieb im Newsbeitrag
news:93l92j$59a$06$1...@news.t-online.com...

> 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


Philipp Pries

unread,
Jan 11, 2001, 5:28:53 PM1/11/01
to
"Hauke Krause" <hauke....@t-online.de> schrieb im Newsbeitrag
news:93lajq$4c2$05$1...@news.t-online.com...

> Val(Right(MyString,InStr(1,MyString,":",vbTextCompare)))

Wobei Du das "vbTextCompare" weglassen kannst.

Philipp


Hauke Krause

unread,
Jan 11, 2001, 6:14:41 PM1/11/01
to

[...]

> > Val(Right(MyString,InStr(1,MyString,":",vbTextCompare)))
>
> Wobei Du das "vbTextCompare" weglassen kannst.
[...]
...wobei ich Quatsch geschrieben:
Val(Right(MyString, Len(MyString)-InStr(1,MyString,":")))

Hauke


Frank Schumacher

unread,
Jan 12, 2001, 3:14:52 AM1/12/01
to
Einen wunderschönen guten ...!

> 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)


Christian Zimmermann

unread,
Jan 12, 2001, 3:25:04 AM1/12/01
to
Philipp Pries schrieb:

> > 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

0 new messages