Problem mit string.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dusselchen14

Betreff: Problem mit string.

BeitragSo, Aug 09, 2009 2:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein theoretisch einfach zu lösendes problem, an dem ich schon seit Stunden hänge:

Nehmen wir an ich habe einen string mit einer unbekannten Anzahl von Name und vor und nach jedem Namen steht ein ".". Also z.b. so:
".Hannah..Horst..Heiko."

Und ich möchte, dass am Ende einer Repeat-Schleife zuerst m$="Hannah" ist dann im nächsten duchlauf m$="Horst" (usw.) und dass,wenn alle namen durchgegangen sind die Schleife Verlassen wird.

Ich weiss nicht ganz wie ich das bewerkstelligen soll.
Die befehle instr, left,right usw. sind mir natürlich alle Bekannt^^

Einer der mindestens 20 Versuche wäre das:
Code: [AUSKLAPPEN]
var$=".nina..hannah..jennifer."
Repeat
p1 = Instr(var$, "..",p1+1)

If p1>0 Then
 m$ = Mid$(var$, p1-p2+2,p1)
p2=p1
Print m$
EndIf

Until p1=0
Print "fertig"
WaitKey
End

Bitte nicht lachen^^ und danke^^

Duempel

BeitragSo, Aug 09, 2009 2:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das so gelöst:
Code: [AUSKLAPPEN]
var$=" .nina..hannah..jennifer..jan..karl..klaus."

Repeat

If word = 0 Then
   pos1 = Instr(var,".",pos2+1)
   word = 1
Else
   pos2 = Instr(var,".",pos1+1)
   word = 0
   m$ = Mid(var,pos1+1,pos2-pos1-1)
   Print m
End If

Until pos1 = 0

Print "Fertig!"
WaitKey
End


Wenn word = 0 ist wird nach der Anfangsposition des neuen Wortes gesucht. Sobald der Wert auf 1 gesetzt wird, wird nach der Endposition des Wortes gesucht, das Wort wird in die Variable m geschrieben und der Wert von word wird wieder auf 0 gesetzt, damit nach einem neuen Wort gesucht werden kann.
Du musst aber aufpassen, dass du nach dem letzten Wort auch einen Punkt setzt, da sonst theoretisch der Wert von pos1 nie auf 0 gesetzt wird und die Schleife dann nichtmehr endet.

Jan

ToeB

BeitragSo, Aug 09, 2009 3:16
Antworten mit Zitat
Benutzer-Profile anzeigen
du brauchst gar net em anfang und am ende einen punkt zu setzten... am ende reicht schon... also :

txt$ = "Hanna.Henri.Heins."

Und dann mit Instr(txt$,".") immer den nächsten herausfinden... Mal ne kleine Function :
Code: [AUSKLAPPEN]
Global txt$ = "Hanna.Henri.Heins.Moritz.Freddy."
Print "String : "+txt$
;Jetzt einzelne Namen anzeigen :
Repeat
   Name$ = Get()
   If Name$ <> "" Print "Name : "+Name$
Until Name$ = ""
Print "-Fertig-"
WaitKey()
End

Function Get$()
   punkt_pos = Instr(txt$,".") ;Position des nächsten Punktes herausfinden
   wort$ = Mid(txt$,1,punkt_pos-1) ;wort VOR dem punkt auslesen
   txt$ = Mid(txt$,punkt_pos+1,Len(txt$)) ;txt auf alles bis auf den ausgelesenen Namen und den punkt wieder abspeichern
   Return wort$ ;Namen wiedergeben
End Function


Ist nicht so kompliziert und spart auch rechen zeit (zwar minimal aber bei vielen berechnungen merkt mans doch)

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Dusselchen14

BeitragSo, Aug 09, 2009 3:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@Duempel
Hey, Danke. warum bin ich da nicht von selbst drauf gekommen?^^
@ToeB
Schon klar, aber in dem fall muss ich es mit 2 Punkten machen. weil Das so in den Dateien steht mit denen ich Arbeite aber Danke.

SpionAtom

BeitragSo, Aug 09, 2009 9:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist doch ganz klar ein Fall für nwort

(Diese Funktion ist standardmäßig mit Leerzeichen als Trennzeichen eingestellt)
Der Vorteil ist, das beliebig viele Trennzeichen (in deinem Fall Punkte) zwischen den Wörtern sein können.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group