BASIC Ein seltsames Verhalten von Stringfunktionen
Moderator: Moderatoren
BASIC Ein seltsames Verhalten von Stringfunktionen
Hallo Leute,
ich habe eben ein komisches Verhalten von Stringfunktionen (InStr, Left, Right) bemerkt:
10: IF i > 0 THEN
20: kuerzel1 = Left(kuerzel, i - 1)
30: kuerzel2 = Right(kuerzel, i)
40: i = InStr( kuerzel2, strHelp)
50: IF i = 1 THEN
60: kuerzel2 = Right(kuerzel, i)
70: END IF
80:END IF
Nun passiert folgendes:
Fall1 kuerzel = "T K"
Fall1 kuerzel = "T KK"
in beiden Fällen befindet sich hinter dem T 1 Leerzeichen
Zeile 20: kuerzel1 ist in beiden Fällen "T" => schön das will ich auch so
Zeile 30: kuerzel2 ist im 1. Fall " K" und im zweiten Fall "KK"
also in Fall 1 steht vor dem K ein Leerzeichen und in Fall 2 keins
Große Frage:
Warum erkennt BASIC vor dem KK 1 Blank und vor dem K 2 Blanks?
Ein schönes WE
ein grübelnder Dirk-Uwe
Da ich den vollständigen Code nicht kenne, somit i=? und strHelp=? kann ich mich nur auf Zeile 20 und 30 beziehen unter Berücksichtigung von:Warum erkennt BASIC vor dem KK 1 Blank und vor dem K 2 Blanks?
also ist i=2 (!) (wegen: kuerzel1 = Left(kuerzel, i - 1) )Zeile 20: kuerzel1 ist in beiden Fällen "T" => schön das will ich auch so
somit arbeitet doch Zeile 30 korrekt, denn:
Right("T K",2) ist " K"
und
Right("T KK",2) ist "KK"
Es werden in beiden Fällen zwei Zeichen von rechts geliefert, warum soll das nicht stimmen? Ich verstehe also nicht wie Du meinst das mal ein und mal 2 Leerzeichen erkannt werden. Oder habe ich etwas falsch verstanden?
Gruß
Stephan
Sorry
War meine Schlamperei !!!!!!
der fehlende Rest vom Code, damit die Story auch wenigstens etwas an Sinn ergibt:
dim strHelp AS STRING
dim i AS INTEGER
strHelp = " " allso ein Leerzeichen (Blank)
5: i = InStr(kuerzel, strHelp) (Hilfe, war ich am, Sa schlecht drauf.....)
Meine Eingabe ist im ersten Fall T"Leerzeichen"K und im zweiten Fall T"Leerzeichen"KK. In beiden Fällen ist im String kuerzel nur ein Leerzeichen, aber die Zeile 5: erkennt mal 1 Leerzeichen und dann 2 Leerzeichen. Ziel meines Codes ist es meine Eingabe blabla"Leerzeichen"blub auf zwei Strings blabla und blub zu verteilen. der komplette Code macht es, aber ich weiß nicht warum Zeile 5 unterschiedliche Anzahlen von Leerzeichen erkennt?
Gruß
Dirk.Uwe
Ich verstehe das immer noch nicht, folgender Code liefert in den zwei Meldungsfenstern jeweils die Zahl "2" was auch korrekt ist:
(gesucht werden soll die Position des ersten Auftauchens von LEERZEICHEN (von links gesehen!), das ist sowohl für "T K" als auch für "T KK" die Position 2)
Wenn ich nun lese das Du:
mithin ist doch Dein ursprünglicher Ausdruck:
kuerzel2 = Right(kuerzel, i)
falsch, weil er nur zufällig für i=2 richtig funktioniert.
Es wäre hilfreich, wenn Du mal Deinen kompletten Code posten würdest, das ich mir nicht aus Deiner Beschreibung den Code selber schreiben muß, weil es ja sein kann das in Deinem (Orginal)code nur ein kleiner Schreibfehler o.ä. ist
Gruß
Stephan
Code: Alles auswählen
Sub Position
dim strHelp AS STRING
dim i(1)
dim a(1)
a(0) = "T K"
a(1) = "T KK"
strHelp = " "
for x = 0 to 1
i(x) = InStr(a(x), strHelp)
MsgBox i(x)
next x
end sub
Wenn ich nun lese das Du:
Dann kannst Du das doch so machen:Ziel meines Codes ist es meine Eingabe blabla"Leerzeichen"blub auf zwei Strings blabla und blub zu verteilen.
Code: Alles auswählen
Sub Position_2
dim strHelp AS STRING
dim i(1)
dim a(1)
dim kuerzel1(1)
dim kuerzel2(1)
a(0) = "T K"
a(1) = "T KK"
strHelp = " "
for x = 0 to 1
i(x) = InStr(a(x), strHelp)
MsgBox i(x)
kuerzel1(x) = Left(a(x),i(x))
MsgBox kuerzel1(x)
kuerzel2(x) = Right(a(x), Len(a(x))-i(x))
MsgBox Kuerzel2(x)
next x
end sub
kuerzel2 = Right(kuerzel, i)
falsch, weil er nur zufällig für i=2 richtig funktioniert.
Es wäre hilfreich, wenn Du mal Deinen kompletten Code posten würdest, das ich mir nicht aus Deiner Beschreibung den Code selber schreiben muß, weil es ja sein kann das in Deinem (Orginal)code nur ein kleiner Schreibfehler o.ä. ist
Gruß
Stephan