Das Notes Forum

Lotus Notes / Domino Sonstiges => Tools & Downloads => Thema gestartet von: Pascal am 07.03.05 - 11:23:09

Titel: Find , Replace in Felder
Beitrag von: Pascal am 07.03.05 - 11:23:09
Hallo zusammen

ich habe irgendwo mal ein Tool oder Agent gesehen mit diesem ich auf Feldebene Werte suchen und ersetzen kann.
Kann mir da jemand weiter helfen??

vielen Dank
Pascal
Titel: Re: Find , Replace in Felder
Beitrag von: Alexis am 07.03.05 - 11:37:22
Hallo Pascal,

schau mal hier herein:

http://chadsmiley.dominodeveloper.net/chadsmiley/home.nsf/d6plinks/CHAY-66Z8T6

Alexis
Titel: Re: Find , Replace in Felder
Beitrag von: Pascal am 07.03.05 - 12:54:26
Danke für den Link, das Problem ist aber das ich nur einen Teil in einem Feld anpassen will: zB:

In Zürich wechseln die Vorwahlnummern von 01 auf 044, jetzt will ich im Pers. NAB die einträge im Feld PhoneNumber anpassen in dem die Zeichenfolge 01 durch 044 ersetzt wird, aber der Rest der Nummer nicht verändert wird ;-) und dies bei allen Dokumenten mit 01 in diesem Feld

Gruss
Pascal
Titel: Re: Find , Replace in Felder
Beitrag von: klaussal am 07.03.05 - 13:10:59
Warum nimmst du dafür keinen Agenten + replacesubstring ?
Titel: Re: Find , Replace in Felder
Beitrag von: Pascal am 07.03.05 - 13:28:12
weil mir das Entwickler Wissen fehlt :(
Titel: Re: Find , Replace in Felder
Beitrag von: koehlerbv am 07.03.05 - 19:17:19
Klaus, @ReplaceSubstring wird aber lustig  ;D Wenn da jemand 'ne "01" in der Rufnummer hat (soll ja vorkommen ...), dann kannste den nicht mehr anrufen - es sei denn, Du hast die Nummer im Kopf  ;)

Pascal: Sind die Telefonnummern denn überhaupt normiert ? Steht da nicht mal sowas wie +41 (0) 3257490157 und mal 01/349 56-001 ?
Beachte bitte: In beiden Telefonnummern kommt die 01 auch an Stellen vor, die bestimmt nicht ausgetauscht werden sollen.
Wenn das nicht normiert ist, kann auch kein Tool Dir beim Austausch helfen - dafür muss ein spezialisierter Parser geschrieben werden. Wenn es aber normiert ist, reicht ein Mini-Ädschentileinichen.

Bernhard
Titel: Re: Find , Replace in Felder
Beitrag von: Pascal am 08.03.05 - 08:43:32
Hallo Bernhard

es ist, die ++41 oder was auch immer für eine internationale Vorwahl verwende ich nur für die Handynummern oder eine Private Tel. nummer ist wirklich im Ausland, was aber bei uns ändert , ist nur die " 01" und dies sind immer die ersten zwei Zeichen links im Feld PrivatPhon.
Weisst du, wenn ich die Formel in deutsch programmieren könnte, dass würde wunderbar funktionieren, nur bin ich mir nicht sicher ob Notes das verstehen würde ;-)

Gruss
Pascal
Titel: Re: Find , Replace in Felder
Beitrag von: Semeaphoros am 08.03.05 - 09:20:29
... und dann kannst Du auch gleich dahinter und alle "++" durch "+" ersetzen, seit rund 15 Jahren gibt es eine ISO-Norm, die aussagt, dass internationale Telefonnummern mit EINEM Plus zu notieren sind (deshalb funktioniert die Nummernschreibweise mit + und Ländercode auch international zuverlässig in allen Ländern :) )
Titel: Re: Find , Replace in Felder
Beitrag von: Christopher am 08.03.05 - 09:28:30
Erstell Dir einen Agenten mit folgenden Code Anschließend Dokumente auswählen und den Agenten starten:


Sub Initialize
   Dim savecount%, tempstring$, itemstring$
   Dim flag As Integer
   Dim workspace As New Notesuiworkspace
   Dim session As New Notessession
   Dim thisdb As Notesdatabase
   Dim collection As Notesdocumentcollection
   Dim doc As Notesdocument
   Dim dialogdoc As Notesdocument
   Dim newdoc As Notesdocument
   Dim tempitem As Notesitem
   Dim dialogformname As String
   Dim dialogform As NotesForm
   Dim totalcount As Integer
   Dim savedcount As Integer
   Set thisdb = session.currentdatabase
   Set collection = thisdb.unprocesseddocuments
   totalcount = collection.count
   Set dialogdoc = thisdb.createdocument
   Set newdoc = thisdb.createdocument
   Set doc = collection.GetFirstDocument
   doc.ParentView.autoupdate = False
' Show copy of first selected document in dialog box
   Call doc.CopyAllItems( dialogdoc )
'Get form name
   Set tempitem = dialogdoc.GetFirstItem("Form")
   If tempitem Is Nothing Then
      dialogformname = ""
   Else
' If Notesitem.Text property is empty or null (or anything but text), useempty string
      Select Case Datatype(tempitem.text)
      Case 8: dialogformname = tempitem.text
      Case Else: dialogformname = ""
      End Select
   End If
   Do
      If dialogformname = "" Then
         dialogformname = Inputbox( "Geben Sie einen Maskennamen für die Dokumentenbearbeitung ein, oder CANCEL zum Beenden." , "Maske nicht gefunden" )
         If dialogformname = "" Then
            Print "Sie haben keinen Maskennamen eingegeben, es wurden keine Änderungen vorgenommen."
            Exit Sub
         End If
      End If
      Set dialogform = thisdb.GetForm( dialogformname )
      If dialogform Is Nothing Then dialogformname = ""
   Loop Until dialogformname <> ""
   flag = Workspace.DialogBox( dialogformname ,True,True,False,False,False,False,"Wenn Sie mit OK bestätigen, werden die Änderungen in allen ausgewählten Dokumenten übernommen !", dialogdoc,True,False)
   If flag = False Then
      Print "Der Dialog wurde abgebrochen, es wurden keine Änderungen vorgenommen."
      Exit Sub
   End If
   
   Forall item In dialogdoc.items
      
      If Datatype(item.text) = 8 Then
         itemstring$ = item.text
      Else
         itemstring$ = ""
      End If
      Set tempitem = doc.GetFirstItem(item.name)
      If tempitem Is Nothing Then
         tempstring$ = ""
      Elseif Datatype(tempitem.text) = 8 Then
         tempstring$ = tempitem.text
      Else
         tempstring$ = ""
      End If
      If itemstring$ <> tempstring$ Then
         Call item.copyitemtodocument(newdoc, "")
      End If
   End Forall
   While Not doc Is Nothing
      Call newdoc.CopyAllItems( doc, True )
      savecount = savecount + 1
      Print totalcount & " Dokumente gewählt, " & savecount & " Dokumente geändert"
      Call doc.save(True, True, True)
      Set doc = collection.GetNextDocument(doc)
   Wend   
End Sub
Titel: Re: Find , Replace in Felder
Beitrag von: koehlerbv am 08.03.05 - 10:27:36
Der gepostete Agent ist nicht geeignet, die Zürcher Vorwahl zu verändern !

Bernhard
Titel: Re: Find , Replace in Felder
Beitrag von: Christopher am 08.03.05 - 11:30:06
hm ja das hast du recht das habe ich jetzt gar nicht gelesen :-( sorry
Titel: Re: Find , Replace in Felder
Beitrag von: AndreTS am 09.03.05 - 17:29:33
- hallo allerseits - nachdem ich jetzt einige zeit zugesehen habe und mit vielen meiner kunden und intressenten in der schweiz telefoniert habe: nach ruecksprache mit unserem technikguru:

- die einfachste moeglichkeit die zuericher vorwahl abzuaendern ob in den dokumenten oder im design ist natuerlich mit dem teamstudio configurator... einfach alte vorwahl eingeben und durch neue ersetzen...

der vorteil dabei ist dass ich den genauen kontext sehe wo die vorwahl vorkommt vor ich das ganze abaendere - im design die vorwahl abzuaendern ist natuerlich mit keinem agent moeglich  8) wenn zudem snapper verwendet wird kann jederzeit ein undo gemacht werden um die aenderungen wieder rueckgaengig zu machen

bei fragen - einfach fragen - poste hier wg. den forumsregeln nicht unsere website aber bei bedarf freue ich mich ueber pn's
Andre
Teamstudio
Titel: Re: Find , Replace in Felder
Beitrag von: Driri am 09.03.05 - 17:41:51
Netter Hinweis, aber nicht jeder hat die tollen Tools im Einsatz  ;)
Titel: Re: Find , Replace in Felder
Beitrag von: koehlerbv am 09.03.05 - 20:29:02
Ingo, sicher hat nicht jeder die Teamstudio-Tools im Einsatz. Professionals sollten aber  ;D
Und wenn man nicht programmieren kann, sollte man den Configurator für sowas dringend in Betracht ziehen - andere Tools arbeiten ja eher nicht interaktiv (wenn gewünscht).

Aber für ein privates Adressbuch - herrjeh. Nö, da wirklich nicht.

Pascal:
Unter der Prämisse "Privates Adressbuch" solltest Du in Erwägung ziehen, einfach die "01" beim wählen durch die "044" zu ersetzen - und peu-à-peu Dein PNAB umstellen. Übler wird es natürlich, wenn Du Notes mit einem Handheld oder telefonino abgleichst.

Ein Tipp: Wenn Du wirklich  (!) die Zürcher Nummern normiert abgeleht hast, bräuchtest Du nur einen Agent (runs on selected) mit folgendem simplen Code:

Code
FIELD PhoneNumber := @If (@Left (PhoneNumber; 2) = "01" & !@Matches (@Middle (PhoneNumber; 2; 1); "{0123456789}"); "044" + @Right (PhoneNumber; @Length (PhoneNumber) - 2); PhoneNumber);
@All

Der tauscht Dir alles aus (in den markierten Kontakt-Dokumenten), das mit "01" anfängt, aber nicht, wenn dort "0135" steht - das dritte Zeichen darf für den Austausch keine Ziffer sein.

HTH,
Bernhard
Titel: Re: Find , Replace in Felder
Beitrag von: Pascal am 13.05.05 - 14:36:12
Hallo Bernhard

vielen Dank, habe den Agenten mit Hielfe eines Entwicklers noch ein wenig angepasst, so werden nun auch die geschäftsnummern angepasst ;-)


vielne Dank
Pascal
Titel: Re: Find , Replace in Felder
Beitrag von: Pascal am 13.05.05 - 15:26:07
und hier noch die Hardcoreversion ;-)

FIELD PhoneNumber := @If (@Left (PhoneNumber; 2) = "01" & !@Matches (@Middle (PhoneNumber; 2; 1); "{0123456789}"); "044" + @Right (PhoneNumber; @Length (PhoneNumber) - 2); PhoneNumber);

FIELD OfficePhoneNumber := @If (@Left (OfficePhoneNumber; 2) = "01" & !@Matches (@Middle (OfficePhoneNumber; 2; 1); "{0123456789}"); "044" + @Right (OfficePhoneNumber; @Length (OfficePhoneNumber) - 2); OfficePhoneNumber);


FIELD OfficeFaxPhoneNumber := @If (@Left ( OfficeFaxPhoneNumber; 2) = "01" & !@Matches (@Middle ( OfficeFaxPhoneNumber; 2; 1); "{0123456789}"); "044" + @Right ( OfficeFaxPhoneNumber; @Length ( OfficeFaxPhoneNumber) - 2);  OfficeFaxPhoneNumber);

FIELD HomeFaxPhoneNumber := @If (@Left ( HomeFaxPhoneNumber; 2) = "01" & !@Matches (@Middle ( HomeFaxPhoneNumber; 2; 1); "{0123456789}"); "044" + @Right ( HomeFaxPhoneNumber; @Length ( HomeFaxPhoneNumber) - 2);  HomeFaxPhoneNumber);


SELECT @All