Suche den Text zwischen zwei Klammern

Anfängerfragen zum Programmieren mit PureBasic.
ComputerFreak_PB
Beiträge: 57
Registriert: 31.08.2006 20:54

Suche den Text zwischen zwei Klammern

Beitrag 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?
PureBasic 4.0 Vollversion
Benutzeravatar
Ttobi
Beiträge: 25
Registriert: 06.03.2005 15:22
Wohnort: Made in Germany (EDDL)
Kontaktdaten:

Beitrag von Ttobi »

Code: Alles auswählen

Position1 = FindString(Text$,"(",0)
Position2 = FindString(Text$,")",Position1)
Text2$ = Mid(Text$,Position1+1,Position2-Position1-1)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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: )
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Ttobi
Beiträge: 25
Registriert: 06.03.2005 15:22
Wohnort: Made in Germany (EDDL)
Kontaktdaten:

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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:
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Wieso ich, das ist nicht mal mein Codestil o_O. Dachte du kennst mich besser :(.
Bild
Antworten