Deutsch
Wünsche und Anregungen

Umgekehrter Substr$()-Befehl

 
- 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:
KompilierenMarkierenSeparieren
Var 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
Var Suchtext$ = MkStr$("A|B|C|D|E|F",31)
print "Durchsuchter-String: " + Suchtext$
print "Gesuchter-Teilstring: B\n"
print "Ergebnis: "+STRINGIndex(Suchtext$,"|","B")
waitinput

Proc StringIndex

    Parameters Text$,Trenn$,Teil$
    Return IndexOf(Explode(Text$,Trenn$),Teil$)+1

EndProc


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.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
03.08.2012  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Jörg
Sellmeyer
so
KompilierenMarkierenSeparieren
Window 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  
 




Dieter
Zornow
Warum nimmst du nicht einfach

teil& = Len(S1$, "|")

um die Anzahl der Teilstrings zu bekommen ?
 
XProfan X2
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
03.08.2012  
 




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.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
03.08.2012  
 




Jörg
Sellmeyer
Warum nicht einfach:
KompilierenMarkierenSeparieren
Print SubStr$("T e s t ver su ch",-2," ")
WaitInput
 
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 ^^
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
04.08.2012  
 




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
Declare A$[]
A$[] = Explode("1|2|3|1|2|4|5|1","|")
Print IndexOf(A$[],"5")' Nullbasierend
WaitInput
 
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.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
05.08.2012  
 




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
Declare A$[],Index%
A$[] = Explode("1|2|3|5|1|2|5|4|5|1","|")

While Index% > -1

    Index% = IndexOf(A$[],"5",Index%+1)' Nullbasierend
    Print Index%

Wend

WaitInput
 
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
KompilierenMarkierenSeparieren
CLS
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

 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
05.08.2012  
 




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
Der erste Teilstring wird nicht erfasst ^^
KompilierenMarkierenSeparieren
Declare A$[],Index%
A$[] = Explode("1|2|3|5|1|2|5|4|5|1","|")

While Index% > -1

    Index% = IndexOf(A$[],"1",Index%+1)' Nullbasierend
    Print Index%

Wend

WaitInput
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
05.08.2012  
 




Jörg
Sellmeyer
so
KompilierenMarkierenSeparieren
Window 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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

14.690 Betrachtungen

Unbenanntvor 0 min.
Thomas Zielinski26.01.2023
H.Brill12.10.2022
Jörg Sellmeyer15.05.2018
Vgdd05.06.2017
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie