Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Alois am 10.02.05 - 11:47:00

Titel: ' oder " oder | ??? will endlich verstehen
Beitrag von: Alois am 10.02.05 - 11:47:00
Hallo ich habe wieder ein Problem und benötige die Meinung der Experte

ich will in ein Script mit der Evaluate Funktion arbeiten weiß allerdings nicht richtig wie ich es anstellen soll....
Bei mir egal was ich in der erste Zeile eingebe, läuft es auf Fehler.

strEval = "@ReplaceSubstring(" + uidb.Database.FilePath + "; "AV"; "AZ")"
dbName = evaluate(strEval)

ich habe irgendwo gesehen dass manche mit ' arbeiten andere mit |... Ich verstehe die Unterschied nicht. Könnte mir das jemand erklären oder mir ein Link geben wo man so was nachlesen kann.

Danke im Voraus
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Glombi am 10.02.05 - 11:51:26
In Script kannst Du folgende Zeichen als Stringdelimiter verwenden
".... "
{ .... }
| ... |

Welche Variante Du nimmst, hängt natürlich auch davon aus, was Du in Evaluate brauchst. Wenn Du dort (d.h. dann in Formelsprachensyntax) eine Oder-Verknüpfung machst - mit | - dann darfst Du natürlich nicht | als String Delimiter nehmen, sondern " oder {}

Andreas
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Axel am 10.02.05 - 11:52:47
Hi,

das | - Zeichen oder die  {} - Klammern kann man in Notes auch als Ersatz für " einsetzen. Das ist besonders hilfreich, wenn in einer Zeichenkette auf Anführungszeichen vorhanden sind.

In deinem Fall müsste es so gehen:

strEval = {@ReplaceSubstring(} + uidb.Database.FilePath + {; "AV"; "AZ")}
dbName = evaluate(strEval)


Axel
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Thomas Schulte am 10.02.05 - 11:56:39
Ich arbeite bei sowas immer mit {} oder | ... |
mit dem " arted sowas meistens in zähldochdeineAnführungszeichen Orgien aus und das muss denn nun nicht sein. Alles was innerhalb der geschweiften Klammern oder des Pipe delimiters steht interpretiert der Compiler als Gesamtstring und damit sind solche Konstruktionen wie:
strHeader =  "Firma""" + "," + """Name""" + "," + """Position""" + "," + """Anschrift""" + "," + """Ort""" + "," + """Briefanrede"
einfacher.
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Alois am 10.02.05 - 12:27:31
ok habe vielleicht jetzt ein Stück mehr verstanden allerdings bei der Zeichenkette:
strEval = {@ReplaceSubstring(} + uidb.Database.FilePath + {; "AV"; "AZ")}

bekomme ich im Debug Modus: "@Replace(test\AVtest.nsf;""AV"";""AZ"")" zurück und das liefert mir ein Type mismatch Fehler zurück  :'(

ich denke dass ich auch die " vor und nach mein db Name brauche

habe dann probiert:
strEval = {@ReplaceSubstring("} + uidb.Database.FilePath + {"; "AV"; "AZ")}
bekomme dann: "@Replace(""test\AVtest.nsf"";""AV"";""AZ"")" mit dem gleichen Fehler

irgendwie fehlt da noch was...

darüber hinaus stört es nicht wenn ein Doppel "" steht? wie wird es dann interpretiert? wie nur ein?
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Semeaphoros am 10.02.05 - 12:38:17
Doppeltes " innerhalb eines Strings wird als ein einfaches " interpretiert und ist Bestandteil des Strings. Anders ausgedrückt, egal ob Du mit | oder {} arbeitest, intern wird das mit " dargestellt und weil ein einfaches " den String beenden würde, wird stattdessen ein "" genommen. Dein Type Mismatch hat damit aber wahrscheinlich nix zu tun. Wie sieht den die gesamte Zeile aus, in der die Fehlermeldung hochkommt?
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Thomator am 10.02.05 - 12:39:56
Hallo,

Das liegt wahrscheinlich am Rückgabetyp der Evaluierung. Dort wird ein Variant zurückgegeben.

Davon mußt Du Dir dann den (0)ten Wert holen.

Thomas
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Axel am 10.02.05 - 12:42:42
Hi,

ich hab's mal so probiert:

   Dim strEval As String
   Dim dbName As Variant
   Dim ws As New NotesUIWorkspace
   Dim uidb As NotesUIDatabase
   
   Set uidb = ws.CurrentDatabase
   strEval = {@ReplaceSubstring("} + uidb.Database.FilePath + {"; "AV"; "AZ")}
   dbName = Evaluate(strEval)

So funktioniert's bei mir. Allerdings schmeisst er mir alle Backslashes raus. Man müsste vorher jeden \ im Pfadnamen durch einen \\ ersetzen.


Axel
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Thomator am 10.02.05 - 12:47:28
Aus der Notes-Hilfe:

Return value
If the Lotus software application macro being executed returns a value, the Evaluate function returns a Variant containing that value. Otherwise, the function does not return a value.

Und das funktioniert bei Dir, Axel?

Edit: Na klar, ist ja ein Variant ;D. Wer lesen kann...

Thomas
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Semeaphoros am 10.02.05 - 12:50:53
Thomas, Variant bedeutet nicht unbedingt einen Array of Variants, wie Du im vorletzten Posting angenommen hast. Wenn der Variant als Scalar vom Typ String zurückkommt, konvertiert das korrekt, ich nehme mal an, das ist, was bei Axel passiert.
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Thomator am 10.02.05 - 13:03:35
Jau, das is man richtig.

Aber der Versuch, von einer Evaluierung direkt an eine Variable vom Typ String zu übergeben wirft immer einen Type-Mismatch, wollte ich damit sagen.

Ich habe da angenommen, dass dbName bei Alois vom Typ String ist...

Thomas
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Semeaphoros am 10.02.05 - 13:13:43
... eben nicht immer, sondern meistens ..... ( .... wirft es den Fehler ...)
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Christopher am 10.02.05 - 13:27:51
So könnte es aussehen:

Function KillUmlaute ( s As String ) As String
   strformula = { @ReplaceSubString("} + s + {"; "ä":"ö":"ü":"ß":"Ä":"Ö":"Ü":"Prof.":"Dr.":".":"_":"-":" "; "ae":"oe":"ue":"ss":"Ae":"Oe":"Ue":"":"":"":"":"":"" ) }
   nStr = Evaluate( strformula )
   KillUmlaute = nstr(0)
End Function
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Alois am 10.02.05 - 13:38:28
Danke an alle aber besonder an Thomator: er hat den richtigen Stichwort geschrieben "Variant". Ja stimmt ich hatte es in ein String gepackt... hmmm

jetzt funzt es fast.
"@Replace(""test\AVtest.nsf"";""AV"";""AZ"")" erscheint aber nach dem evaluate ist in mein (0)te Wert nicht test\AZtest.nsf wie erwartet sondern testAZtest.nsf.

Ich bin immer noch der Meinung dass die " irgendwie fehlerhaft sind oder hat das Zeichen \ eine Bedeutung und ich muss es zuerst durch / ersetzen?
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Semeaphoros am 10.02.05 - 13:47:55
\ ist in Script Escape-Char und Du musst alle \ durch \\ ersetzen, das hat Axel schon weiter oben geschrieben
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Axel am 10.02.05 - 13:49:24
Hi,

hast du meine Antwort #7 nicht gelesen? Dort habe ich im letzten Satz darauf hingewiesen.


Axel
 
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Glombi am 10.02.05 - 13:50:25
uidb.Database.FilePath
liefert sowas wie
verzeichnis\date.nsf

In Evaluate brauchst Du aber ein
verzeichnis\\date.nsf

Also so
dim ret_eval as variant
dim path as string
ret_eval= Evaluate(|@ReplaceSubstring(@Subset(@DbName;-1);"\\";"\\\\")|)

path = ret_eval(0)

Dim strEval As String
   Dim dbName As Variant
   Dim ws As New NotesUIWorkspace
   Dim uidb As NotesUIDatabase
  
   Set uidb = ws.CurrentDatabase
   strEval = {@ReplaceSubstring("} + path + {"; "AV"; "AZ")}
   dbName = Evaluate(strEval)


Andreas
Titel: Re: ' oder " oder | ??? will endlich verstehen
Beitrag von: Alois am 10.02.05 - 14:03:05
Ups tut mir Leid, habe nicht gesehen gehabt  ;D

Thx an alle jetzt funzt