Lotus Notes / Domino Sonstiges > Tipps und Tricks

InStrRev

(1/1)

0xse:
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

Thomas Schulte:
Stimmt das fehlt nur habe ich bis jetzt nie eien Grund gefunden warum ich nicht StrRightBack benutzen kann

0xse:
lass mir doch meine kreative langeweile :)

koehlerbv:
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 ...
...


--- Zitat von: 0xse am 10.08.05 - 16:18:48 ---viel spass damit :)

--- Ende Zitat ---

Haben wir gehabt.

Bernhard

PS: Nimm es mir nicht übel, aber sowas erscheint normalerweile unter "worst practices fpr coding".

0xse:
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 :)

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln