BASIC Ein seltsames Verhalten von Stringfunktionen

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

Moderator: Moderatoren

Raabun
**
Beiträge: 26
Registriert: So, 27.06.2004 14:13

BASIC Ein seltsames Verhalten von Stringfunktionen

Beitrag von Raabun »

:?:
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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Warum erkennt BASIC vor dem KK 1 Blank und vor dem K 2 Blanks?
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:
Zeile 20: kuerzel1 ist in beiden Fällen "T" => schön das will ich auch so
also ist i=2 (!) (wegen: kuerzel1 = Left(kuerzel, i - 1) )

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
Raabun
**
Beiträge: 26
Registriert: So, 27.06.2004 14:13

Sorry

Beitrag von Raabun »

:oops:
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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ich verstehe das immer noch nicht, folgender Code liefert in den zwei Meldungsfenstern jeweils die Zahl "2" was auch korrekt ist:

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
(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:
Ziel meines Codes ist es meine Eingabe blabla"Leerzeichen"blub auf zwei Strings blabla und blub zu verteilen.
Dann kannst Du das doch so machen:

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
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
Raabun
**
Beiträge: 26
Registriert: So, 27.06.2004 14:13

Beitrag von Raabun »

:)
Danke, das war die Lösung,

Right(MyString, Length) – liefert die letzten Length Zeichen von MyString.

und nicht wie ích es las, die Zeichen ab Length

Sorry für die Mühe, die ich Dir machte
Raabun
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Sorry für die Mühe, die ich Dir machte
Kein Problem, dafür ist das Forum ja da.


Gruß
Stephan
Antworten