Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Hedwig14 am 23.04.07 - 12:22:14

Titel: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 23.04.07 - 12:22:14
Hallo,

die User haben teilweise in einem Textfeld ein Return gesetzt.
Dieses Return möchte ich nachträglich entfernen, da ich sonst
Probleme bei der Auswertung (Export in txt oder csv) habe.

Bislang habe ich es mit diesem Agenten versucht - leider ohne Erfolg

Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim anzDoks As Double
   
   Set db = S.CurrentDatabase
   Set view =db.GetView ("(Umfrage_PR)")                              ' Ansichtsname
   Set collection = db.UnprocessedDocuments            ' ausgewähle Dokumente
   Set doc = collection.GetFirstDocument
   
   anzDoks = 0
   
   While Not(doc Is Nothing)
      anzDoks = anzDoks + 1
      Print anzDoks
      
      Dim varResult As Variant
      Dim varResult2 As Variant
      
      Const strFormula = |@ReplaceSubString(U_Antwort_5 ;@Newline;" ") |
      Const strFormula2 = |@ReplaceSubString(U_Antwort_5b ;@Newline;" ") |
      
      varResult = Evaluate(strFormula, doc)
      varResult2 = Evaluate(strFormula2, doc)
      
      doc.U_Antwort_5 = varResult
      doc.U_Antwort_5b = varResult2
      
      Call doc.save(True,True)      
      
      Set doc = collection.GetNextDocument( doc)
   Wend
   
   Msgbox "Es wurden "& anzDoks & " Dokumente angepasst"
   
End Sub
Titel: Re: Return im Textfeld entfernen
Beitrag von: Thomas Schulte am 23.04.07 - 12:38:36
Dim CrLf As String
Dim PosOfCrLf As Integer
Const spaces = " " ' 2 spaces

CrLf = Chr$(13) & Chr$(10) ' Carriage Return and a Line Feed character

PosOfCrLf = Instr(Stringfield, CrLf)
While PosOfCrLf > 0
Mid$(stringfield, PosOfCrLf, 2) = spaces
PosOfCrLf = Instr(stringfield, CrLf)
Wend

Anywhere in the string that Chr$(13) and Chr$(10) appear together will be replaced by two spaces.
Titel: Re: Return im Textfeld entfernen
Beitrag von: Axel am 23.04.07 - 12:44:13
Um welche Domino-Version handelt es sich hier denn?

Axel
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 23.04.07 - 13:31:49
Domino 6.55
Titel: Re: Return im Textfeld entfernen
Beitrag von: LohCon am 23.04.07 - 16:53:51
... oder ersetze in Deiner Formel @NewLine durch -> @Char(0)
Titel: Re: Return im Textfeld entfernen
Beitrag von: koehlerbv am 23.04.07 - 23:18:44
Sowas al Konstanten zu definieren, wenn es um Variable geht, kann schon gar nicht funktionieren (was eigentlich logisch sein sollte).

Warum arbeitet Hedwig nicht einfach mit der LotusScript Function Replace? Sicherheitshalber sollte man das sowhl über Chr$ (10) und Chr$ (13) separat laufen lassen, falls unterschiedliche Datenquellen involviert sind.

Bernhard
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 24.04.07 - 17:21:46
Ich habe nochmal unter NotesHilfe und hier im Forum nachgesehen.

Ich konnte keinen vergleichbaren Scriptcode finden.

Hat jemand eventuell ein Script mit der Function Replace um mein Prob entwas näher zu kommen ?

Vielen Dank !
Titel: Re: Return im Textfeld entfernen
Beitrag von: m3 am 24.04.07 - 17:24:48
Direkt aus der Designer-Hilfe:
Code
Sub Initialize
   Dim array1(2) As string
   Dim array2(2) As string
   Dim array3(2) As string
   Dim ret As Variant
   array1(0) = "original0"
   array1(1) = "ThisShouldNotBeReplaced1"
   array1(2) = "original2"
   array2(0) = "original"
   array2(1) = "ShouldNotFindThis"
   array2(2) = "once"
   array3(0) = "replaced--once--"
   array3(1) = "this should be skipped"
   array3(2) = "twice"
   ret = replace(array1, array2, array3)
   for x = 0 to 2
      Print ret(x)
   Next
End Sub 
'OUTPUT
'replaced--twice--0
'ThisShouldNotBeReplaced1
'replaced--twice--2
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 24.04.07 - 17:27:35
Ja, das habe ich gesehen.
Wie kann ich das umsetzten, damit ich Return(Enter) aus einem Textfeld bekomme

@newline
@Char(10)
oder @Char(13)
Titel: Re: Return im Textfeld entfernen
Beitrag von: m3 am 24.04.07 - 17:29:54
Du sprichst Formelsprache, der Code war LotusScript.
Der Unterschied ist Dir schon klar?

Die relevante Info hat Dir Bernhard (koehlerbv) schon gegeben.
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 24.04.07 - 17:34:21
ja, das ist mir klar.
Wollte damit nur deutlich machen welche werte ich entfernen möchte.

Meine Frage ist wie ich den ReplaceCode (s.o.) so umstellen muss, dass
diese Werte aus meinem Textfeld verschwinden. Habe mit der Replace Function noch
nicht gearbeitet und tue mich damit etwas schwer !
Titel: Re: Return im Textfeld entfernen
Beitrag von: m3 am 24.04.07 - 18:03:14
/me schreibt Code für andere nur gegen Bezahlung.
Konkrete Fragen beantworte ich aber gerne auch kostenlos.
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 24.04.07 - 18:08:10
ich habe inzwischen diesen code geschreiben.
was mache ich hier nur falsch ?




Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim rc1 As NotesItem
   Dim rc2 As NotesItem
   Set db = session.CurrentDatabase
   Set view = db.GetView("Umfrage_PR")
   Set doc = view.GetFirstDocument
   
   While Not(doc Is Nothing)
      Set rc1 = doc.GetFirstItem("U_Antwort_8")
      Set rc2 = doc.GetFirstItem("U_Antwort_5b")
      
      eval1 = Evaluate (    | @ReplaceSubstring( rc1 ;@NewLine;" ") | )
      eval2 = Evaluate (    | @ReplaceSubstring( rc2 ;@NewLine;" ") | )
      
      Call doc.ReplaceItemValue("U_Antwort_8", eval1)
      Call doc.ReplaceItemValue("U_Antwort_5b", eval2)      
      
      Call doc.Save(True, False)
      Set doc = view.GetNextDocument(doc)
   Wend
   
End Sub
Titel: Re: Return im Textfeld entfernen
Beitrag von: DAU-in am 24.04.07 - 18:19:56
@ReplaceSubstring( sourceList ; fromList ; toList )

Ich kann es gerade nicht ausprobieren, aber ich glaube nicht, dass @newline hier als 'fromlist' gültig ist, auch wenn der Rückgabwert ein String ist

was zeigt der Debugger denn für eval1 und eval2 an?


noch nachgeschoben: wenn du eh das ganze in Script machst, warum nimmst du nicht die replace function?
Titel: Re: Return im Textfeld entfernen
Beitrag von: koehlerbv am 24.04.07 - 18:28:45
@"DAU-in":
@NewLine ist als "fromlist" sehr wohl geeignet.

@Hedwig:
Du machst da so gut wie alles falsch. rc1 ist ein NotesItem, und damit können werder Evaluate noch und vor allem @ReplaceSubstring etwas anfangen. rc1 wird aber gar nicht als NotesItem mehr wahrgenommen, weil es innerhalb eines Strings als sinnlose Aneinanderreihung von drei Zeichen steht. Evaluate fehlt zudem der Bezug zum NotesDocument, auf den - wenn syntaktisch richtig formuliert - sich der Itemname (!) rc1 bezieht.

Und ist

Ergebnisstring = Replace (doc.U_Antwort_8 (0), Chr$ (13); " ")

nur so schwer?

Bernhard
Titel: Re: Return im Textfeld entfernen
Beitrag von: LohCon am 24.04.07 - 18:50:40
Warum nimmst Du nicht Deinen 1. Code von ganz oben und packst Ihn direkt in eine Viewaction in das Click - Event. Klappt prima ... Ich verwende statt "@NewLine" allerdings -> @Char(0), aber @NewLine tut's auch

Und in Formelsprache sieht das so aus: @ReplaceSubstring(DeinFeld; @Char(0) ; " ")

- Jörg
Titel: Re: Return im Textfeld entfernen
Beitrag von: LohCon am 24.04.07 - 19:20:02
@ReplaceSubstring(MeinFeld; @Char(0) ; " " )

verwende ich übrigens auch direkt in der Eingbeumsetzung des Feldes.
Titel: Re: Return im Textfeld entfernen
Beitrag von: Hedwig14 am 26.04.07 - 12:57:29
Habe nun einen Agenten genommen:

_rc := @ReplaceSubstring(U_Antwort_8 ;@Char(0);" ");
@SetField("U_Antwort_8"; _rc);
SELECT @All

Das Problem ist gelöst, vielen Dank an alle !