Das Notes Forum

Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: 0xse am 10.08.05 - 16:18:48

Titel: InStrRev
Beitrag von: 0xse am 10.08.05 - 16:18:48
verzweifelt gesucht, nun selbst geschrieben

start -> von hinten, ab 1, anzahl der zeichen
s -> der string in dem gesucht wird
m -> der string nach dem gesucht wird

bei fehlern wird pauschal eine 0 zurückgegeben. einen compare type gibt es nicht. kein parameter ist optional.

viel spass damit :)


Function instrrev(start As Long,s As String, m As String) As Long
   Dim pos As Long, lpos As Long, posmax As Long
   If len(s) = 0 Or Len(s) - Len(m) - start < 0 Or start < 1 Then Goto ende
   posmax = Len(s) - start + 1
   Do
      lpos = pos
      pos = Instr(pos + 1, s, m, 0)
      If pos = 0 Or (pos > posmax And lpos <= posmax) Then Goto ende
   Loop
ende:   
   instrrev = lpos
End Function
Titel: Re: InStrRev
Beitrag von: Thomas Schulte am 10.08.05 - 16:30:52
Stimmt das fehlt nur habe ich bis jetzt nie eien Grund gefunden warum ich nicht StrRightBack benutzen kann
Titel: Re: InStrRev
Beitrag von: 0xse am 10.08.05 - 16:47:51
lass mir doch meine kreative langeweile :)
Titel: Re: InStrRev
Beitrag von: koehlerbv am 10.08.05 - 17:00:31
Datentyp Long ist nun wahrlich "auf Nummer sicher", wenn es um Strings in LS geht. Dafür gibt es kein ErrorHandling ... Und wenn da jemand "start = -80" hineinkippt ?
"Sprechende Variablenbezeichner" - Fehlanzeige.
Default-Werte - Fehlanzeige.
Standardkonformität - Fehlanzeige (LS meint mit der Position immer da betreffende Zeichen, also 1 für das erste Zeichen)
Was macht "lpos" da ? So schwer lesbar der Code auch ist, aber darauf kann man doch verzichten ...
...

viel spass damit :)

Haben wir gehabt.

Bernhard

PS: Nimm es mir nicht übel, aber sowas erscheint normalerweile unter "worst practices fpr coding".
Titel: Re: InStrRev
Beitrag von: 0xse am 11.08.05 - 08:33:20
Solche Trivialfunktionen selber schreiben zu müssen ist "worst practise". Aber sie war nunmal nicht da.

Aber selbst mit den Variablennamen, ist so ein kurzer Quellcode doch wohl zu verstehen...

Und Thomas Schulte... StrRightBack macht was ganz anderes als InStrRev...


> Datentyp Long ist nun wahrlich "auf Nummer sicher", wenn es um Strings in LS geht.
Die können immerhin beliebig groß sein. Und an den paar Byte soll es dann nicht scheitern.

> Dafür gibt es kein ErrorHandling ... Und wenn da jemand "start = -80" hineinkippt ?
"Sprechende Variablenbezeichner" - Fehlanzeige.
Wenn du mal guckst, bei Fehlern gibts immer eine 0 zurück. Und wenn du dir mal die InStr Funktion anschaust, die gibt bei Fehlern auch immer eine 0 zurück. (Unter bestimmten Umständen auch NULL oder Error.)


> Default-Werte - Fehlanzeige.
Das ist LS... das initialisiert Variablen von alleine. Strings sind leer, Zahlen sind 0.

> Standardkonformität - Fehlanzeige (LS meint mit der Position immer da betreffende Zeichen, also 1 für das erste Zeichen)
Ich zähle von hinten. Und jetzt sag nicht das du dich an jeden existierenden Standard hällst...

> Was macht "lpos" da ? So schwer lesbar der Code auch ist, aber darauf kann man doch verzichten ...
lpos: last position
pos: position
posmax: maximal position
start: begin, counted from right
s: search string
m: match string

sprechen meine variablen so wenig? ich finde nicht.


edit:
der text sollte nicht so böse sein wie er klingt :)