Sonderzeichen via Funktion tauschen

  • Hallo Zusammen,


    ich habe mir eine Funktion wie folgt geschrieben:



    Ich schicke anschließend jeden String der Sonderzeichen enthalten könnte in die Funktion, ist dies so aus Performance oder anderen Gründen falsch?


    Code
    1. If Not(item Is Nothing) Then
    2. vorname=item.Values(0)
    3. vorname=TauscheSonderzeichen(vorname)
    4. End If
  • mh da wüsste ich nun nicht wie ich das vorher abfragen könnte... der Aufruf ist genau wie oben beschrieben

  • Ich würde jetzt das ganze in eine Klasse einbauen. Die beiden Arrays nur 1 mal als Klassenvariable initialisieren und nicht bei jedem Funktionsaufruf und beim Errorhandler fehlt ein Resume....

  • Ich würde jetzt das ganze in eine Klasse einbauen. Die beiden Arrays nur 1 mal als Klassenvariable initialisieren und nicht bei jedem Funktionsaufruf und beim Errorhandler fehlt ein Resume....

    Vielen Dank an Umeli für Deine Hilfe, ich habe mit seiner Hilfe nun versucht dies als Klasse zu lösen.

    Ich habe nur ein komisches Phänomen, das eine Variabel, die ich an die Funktion der Klasse übergebe auch geändert wird...


    Ich versuche den Code mal abzubilden:


    Klasse:


    Mein Aufruf sieht wie folgt aus:

    Sobald ich dlorgadoczimmernr übergebe, wird in der Ausgabe diese Variabel dlorgadoczimmernr verändert ausgegeben

    und eben wie erwartet auch die dlorgadoczimmernrtauschrdy


    Set dlorgadoczimmernrtausch = New TauscheRaumPrefix()

    If Not (dlorgadoczimmernrtausch Is Nothing) then

    dlorgadoczimmernrtauschrdy = dlorgadoczimmernrtausch.TauscheRaumzeichen(dlorgadoczimmernr)

    End If

    Delete dlorgadoczimmernrtausch

  • Per Default werden in LotusScript Variablen IMMER per Referenz übergeben.


    und diese Zeile:

    Code
    1. orgStr=Replace(orgStr,me.replaceStr,me.replaceWithStr)

    ändert dann die übergebene Variable.


    Du kannst das ändern, indem Du die Übergabeparameter als "byVal" definierst, das funktioniert aber nur bei Primitiven, nicht bei Klasseninstanzen.


    Code
    1. Public Function TauscheRaumzeichen (ByVal orgStr As String) As Variant


    prinzipiell ist es schlechter Stil, eine übergebene Variable zu manipulieren, es sei denn, das ist genau das, was Du im aufrufenden Code erwartest. Dann bräuchtest Du auch keine Funktion, dann würde eine Sub reichen, die Du so aufrufst:


    Code
    1. call dlorgadoczimmernrtausch.TauscheRaumzeichen(dlorgadoczimmernr)


    und dadurch würde automatisch dlorgadoczimmernr geändert... Ist aber nicht wirklich schön.


    Im übrigen ist Dein Code so auch nicht wirklich viel "schöner" oder "performanter". Du müsstest die Zeile "Set dlorgadoczimmernrtausch = New TauscheRaumPrefix()" ganz oben außerhalb der While- Schleife setzen, damit Du das Objekt wirklich nur einmal instanziierst, und nicht für jedes neue Dokument erneut...


    Zur Performance allgemein: String- Concatenations sind wahnsinnig "kostspielige" Operationen bezüglich Zeitaufwand. Du könntest Deinen Code um ein vielfaches beschleunigen, wenn Du auf die ganzen a + b + c + d verzichten würdest, und stattdessen die StringBuffer- Klasse von Julian Robichaux (siehe hier) benutzen würdest.

  • Vielen Dank für Deine Rückmeldung, mit Hilfe der Klasse konnte ich dies zumindest lösen und ausgeben.


    Das Set... habe ich außerhalb der Schleife gepackt, vielen Dank für den Hinweis.


    Das mit der StringBuffer- Klasse habe ich leider nicht verstanden bisher, ansonsten hätte ich dies mit umgesetzt