Italia
Wünsche und Anregungen

Umgekehrter Substr$()-Befehl

 
- Page 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 necessario. Ist vlt sinnvoll diese in XProfan einzubauen.

Nachtrag: Durch Jörgs-Aiuto 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," ")
WaitInpute>
 
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<
pre>
 
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 potuto 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 per 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

Wai
 
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 corre 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 circa 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

Wai
 
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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

14.686 Views

Untitledvor 0 min.
Thomas Zielinski26.01.2023
H.Brill12.10.2022
Jörg Sellmeyer15.05.2018
Vgdd05.06.2017
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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