Seite 1 von 3

Suche den Text zwischen zwei Klammern

Verfasst: 16.10.2006 17:44
von ComputerFreak_PB
Hi

Ich habe einen Text: z.B.: Text(Hallo) . Jetzt möchte ich zurückgegeben haben, was zwischen den Klammern steht. Ich habe schon die Befehle ausprobiert:

Code: Alles auswählen

Position1 = FindString(Text$,"(",0)
Position2 = FindString(Text$,")",Position1)
Text2$ = Mid(Text$,Position1+1,???????)
Was muss ich für ??????? reinschreiben?

Verfasst: 16.10.2006 17:52
von Ttobi

Code: Alles auswählen

Position1 = FindString(Text$,"(",0)
Position2 = FindString(Text$,")",Position1)
Text2$ = Mid(Text$,Position1+1,Position2-Position1-1)

Verfasst: 16.10.2006 17:56
von ts-soft
zu langsam :(

Code: Alles auswählen

Text.s = "Test(Hallo)"
pos1 = FindString(Text, "(", 1)
If pos1
  pos2 = FindString(Text, ")", pos1)
  Text2.s = Mid(Text, pos1 + 1, pos2 - pos1 - 1)
EndIf
Debug Text2
Die If abfrage, ob überhaupt die erste Klammer gefunden wurde, finde ich
aber wichtig 8)

Verfasst: 16.10.2006 19:04
von AND51
Es geht noch schneller, TS-Soft! :mrgreen:

Ungetestet; die Prüfung, ob eine Klammer vorhanden ist, musste selber einbauen:

Code: Alles auswählen

string$="bla bli blub (Oh si tacuisset!) lalalala träller, pfeif"


auf=FindString(string$, "(", 1)
zu=Findstring(string$, ")", 1)
Debug PeekS(@string$+auf, zu-auf-1)
Habe den Code on-the-fly geschrieben, eventuell muss man noch die Positionen anpassen mit +1 bzw. -1.

Verfasst: 16.10.2006 19:26
von ts-soft
AND51 hat geschrieben:Es geht noch schneller, TS-Soft! :mrgreen:
Falsch verstanden, ich meinte ich war zu langsam beim posten, Arthur
(MVXA) war schneller.

Wann hast Du getestet, das PeekS schneller ist als Mid, kann ich mal den
Testcode sehen?

Ausserdem ist eine verständliche Syntax wichtiger als die Geschwindigkeit,
jedenfalls meistens, der PC wartet zu 99% sowieso nur auf Eingaben des
Users. Bei Spielen trifft dies natürlich nicht unbedingt zu, es sei denn ich
spiele :mrgreen:

Verfasst: 16.10.2006 19:31
von AND51
Nein, was ich getestet habe war bei den vielen StringField-Funktionen, die ichauch im englischen Forum gepostet habe, damit sie in PB aufgenommen werden. Da hatte ich rausgefunden, dass alle Rechts-Funktionen schneller sind, als die Links-Funktionen... Besonderheit: trim() ist auch langsamer als die entsprechende rechts-Funktion.
Heute hatte ich auch das erste Mal die Funktionen LSet() und RSet() getestet, hier gilt das gleiche.

Wie ich getestet habe? Nun, ich habe einfach in einer FOR-Schleife 1 Mio. durchläufe mit den Teststrings gemacht.

Heute habe ich sogar (kein Scherz) die verschiednen Schleifen getestet, ich glaub 1000 Mal aber nur, weil mein PC auf einmal stark ausgelastet war (natürlich ohne Debugger, so wie es mir erklärt wurde).

Sieger war ganz klar FOR/NExt, dann kam glaub ich REPEAT, das Schlusslicht bildete WHILE, alle haben bis 100 oder 1000 gezählt.

Verfasst: 16.10.2006 19:46
von ts-soft
Sieger ist die Schleife, welche sich hierfür anbietet. 1000 oder mehr For Next
Schleifen hintereinander brauchte ich noch nicht und halte ich für
unrealistisch :mrgreen:

Fuß oder Kopfgesteuert ergibt sich autom., und For Next bietet sich nur an,
wenn die Anzahl der Durchläufe feststeht und die Zählvariable auch genutzt
wird. Die tausendstel Sekunden die Du sparst werden sich auf eine
Anwendung garnicht auswirken. Wenn ich aber auf sowas angewiesen bin,
nutze ich ASM (bzw. Frage jemanden, ob er mir das machen kann
:mrgreen: )

Verfasst: 16.10.2006 20:31
von Ttobi
ts-soft hat geschrieben:...Falsch verstanden, ich meinte ich war zu langsam beim posten, Arthur
(MVXA) war schneller....
Ich bin nich mvxa, hab nurn ähnliches Avatar ;D

Verfasst: 16.10.2006 20:33
von edel
halb so wild ts-soft
---------------------------
Ergebnis
---------------------------
Es wurden je 10000000 Aufrufe gestartet

AND : 5968 ms.

ts-soft: 4453 ms.

edel : 2422 ms.


---------------------------
OK
---------------------------
:lol:

Verfasst: 16.10.2006 20:38
von MVXA
Wieso ich, das ist nicht mal mein Codestil o_O. Dachte du kennst mich besser :(.