| |
|
|
- Seite 1 - |
|
Julian Schmidt | Ein umgekehrter Substr$-Befehl mit dem man nicht, wie bei Substr%(), den N-ten Teilstring herausfiltert, sondern den Index(N) des Teilstrings S2 des Strings S1 herausfindet
Etwa so: KompilierenMarkierenSeparierenVar Suchtext$ = MkStr$("A|B|C|D|E|F",31)
print "Durchsuchter-String: " + Suchtext$
print "Gesuchter-Teilstring: B\n"
print "Ergebnis: "+STRINGIndex(Suchtext$,-1,"|","B")
waitinput
Proc StringIndex
Parameters Text$,Start%,Trenn$,Teil$
Declare A$[],Ergebnis$
A$[] = Explode(Text$,Trenn$,Start%)
Repeat
Start% = IndexOf(A$[],Teil$,Start%+1)' Nullbasierend
Case Start% = -1:Break
Ergebnis$ = Ergebnis$+If(Ergebnis$="","","|")+Str$(Start%+1)
Until Start% = -1
Return Ergebnis$
EndProc
KompilierenMarkierenSeparieren Habe diese Routine in einen Projekt schon einige male benötigt. Ist vlt sinnvoll diese in XProfan einzubauen.
Nachtrag: Durch Jörgs-Hilfe verbessern Quelltext eingefügt. |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Seite 1 - |
|
Jörg Sellmeyer | so KompilierenMarkierenSeparierenWindow 1000,400
Var Suchtext$ = MkStr$("A|B|C|D|E|F|A|B|C|D|E|F|A|B|C|D|E|F",50)
print "Durchsuchter-String: " + Suchtext$
print "Gesuchter-Teilstring: 1\n"
Print "Taste drücken"
WaitKey
Var time&=&gettickcount
SubstrNr1(Suchtext$,"B","|")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms\n"
time&=&gettickcount
StringIndex(Suchtext$,-1,"|","B")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms"
waitinput
Proc SubstrNr1
Parameters S1$,TeilString$,Trennzeichen$
Declare Ergebnis$
Whileloop Len(S1$, Trennzeichen$)
Case (SubStr$(S1$,&loop,Trennzeichen$)=TeilString$) : Ergebnis$=Ergebnis$+If(Ergebnis$="","","|")+Str$(&loop)
EndWhile
Return Ergebnis$
EndProc
Proc StringIndex
Parameters Text$,Start%,Trenn$,Teil$
Declare A$[],Ergebnis$
'$D "",text$
A$[] = Explode(Text$,Trenn$,Start%)
Repeat
Start% = IndexOf(A$[],Teil$,Start%+1)' Nullbasierend
Case Start% = -1:Break
Ergebnis$ = Ergebnis$ + Str$(Start%) + ","
Until Start% = -1
Return Ergebnis$
EndProc
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|
|
|
| |
|
- Seite 1 - |
|
Julian Schmidt | War mir nicht bekannt das man Len() auch so verwenden kann, obwohl es gar nicht so neu zu seien scheint. Danke! Ich habe durch dich wieder was gelernt. |
|
|
| |
|
|
|
Jörg Sellmeyer | |
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 03.08.2012 ▲ |
|
|
|
|
Julian Schmidt | Hättest du mehr als die Überschrift durchgelesen wüsstest du das dein Beitrag nichts zum Thread beisteuert ^^ |
|
|
| |
|
|
|
Jörg Sellmeyer | Hättest du einen passenderen Titel gewählt, hätte man sich nicht durch deinen hilfetexttypischen Einleitungssatz quälen müssen, bis man ihn versteht. KompilierenMarkierenSeparieren |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|
|
Julian Schmidt | Jup, auch eine Alternative, allerdings listet dieses immer nur einen Pfund. Meistens reicht es, allerdings manchmal braucht man auch alle Pfunde. Man könnte deinen Quelltext auch dahingehend modifizieren. Ist allerdings nicht die Mühe wert. |
|
|
| |
|
|
|
Jörg Sellmeyer | Was ist denn mit Dir los? Hast du 'ne Giftnatter gefrühstückt oder warum motzt du hier so rum. Ich zeige dir, wie du einen Code in 2 Zeilen statt 10 schreibst und du meckerst hier rum. Trotzdem ist hier auch die Mehrfachsuche noch für den Rest der Gemeinde: KompilierenMarkierenSeparieren |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|
|
Julian Schmidt | Bei mir sind 4 Zeilen immer noch weniger als 6. Außerdem scheint dein Code noch etwas Murx zu sein. Er läuft allerdings etwas schneller durch KompilierenMarkierenSeparierenCLS
print "Durchsuchter-String: 1|2|3|1|2|4|5|1"
print "Gesuchter-Teilstring: 1\n"
Var time&=&gettickcount
print "Ergebnis durch Proc 1: "+SubstrNr1("1|2|3|1|2|4|5|1","1","|")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms\n"
time&=&gettickcount
print "Ergebnis durch Proc 2: "+SubstrNr2("1|2|3|1|2|4|5|1","1","|")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms"
waitinput
Proc SubstrNr1
Parameters S1$,TeilString$,Trennzeichen$
Declare Ergebnis$
Whileloop Len(S1$, Trennzeichen$)
Case (SubStr$(S1$,&loop,Trennzeichen$)=TeilString$) : Ergebnis$=Ergebnis$+If(Ergebnis$="","","|")+Str$(&loop)
EndWhile
Return Ergebnis$
EndProc
Proc SubstrNr2
Parameters S1$,TeilString$,Trennzeichen$
Declare A$[],Index%,Ergebnis$
A$[] = Explode(S1$,Trennzeichen$)
While Index% > -1
Index% = IndexOf(A$[],TeilString$,Index%+1)
Case Index%>-1 : Ergebnis$=Ergebnis$+If(Ergebnis$="","","|")+Str$(Index%+1)
EndWhile
Return Ergebnis$
EndProc
|
|
|
| |
|
|
|
Jörg Sellmeyer | Dann klär mich doch mal über den Murx auf Und teste das ganze mal mit einem String von 10000 Zeichen oder so. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|
|
Julian Schmidt | |
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Jörg Sellmeyer | so KompilierenMarkierenSeparierenWindow 1000,400
Var Suchtext$ = MkStr$("A|B|C|D|E|F|A|B|C|D|E|F|A|B|C|D|E|F",50)
print "Durchsuchter-String: " + Suchtext$
print "Gesuchter-Teilstring: 1\n"
Print "Taste drücken"
WaitKey
Var time&=&gettickcount
SubstrNr1(Suchtext$,"B","|")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms\n"
time&=&gettickcount
StringIndex(Suchtext$,-1,"|","B")
print "Gebrauchte Zeit: "+Str$(&gettickcount-time&)+" ms"
waitinput
Proc SubstrNr1
Parameters S1$,TeilString$,Trennzeichen$
Declare Ergebnis$
Whileloop Len(S1$, Trennzeichen$)
Case (SubStr$(S1$,&loop,Trennzeichen$)=TeilString$) : Ergebnis$=Ergebnis$+If(Ergebnis$="","","|")+Str$(&loop)
EndWhile
Return Ergebnis$
EndProc
Proc StringIndex
Parameters Text$,Start%,Trenn$,Teil$
Declare A$[],Ergebnis$
'$D "",text$
A$[] = Explode(Text$,Trenn$,Start%)
Repeat
Start% = IndexOf(A$[],Teil$,Start%+1)' Nullbasierend
Case Start% = -1:Break
Ergebnis$ = Ergebnis$ + Str$(Start%) + ","
Until Start% = -1
Return Ergebnis$
EndProc
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|
|
Julian Schmidt | Jup, jetzt passt es zu 100%. Hab deine Routine in meinen Ausgangsbeitrag eingefügt. |
|
|
| |
|
|
|
Jörg Sellmeyer | |
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.08.2012 ▲ |
|
|
|