Das Notes Forum
Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet 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
-
Stimmt das fehlt nur habe ich bis jetzt nie eien Grund gefunden warum ich nicht StrRightBack benutzen kann
-
lass mir doch meine kreative langeweile :)
-
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".
-
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 :)