Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Tode am 28.06.18 - 11:56:58

Titel: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 28.06.18 - 11:56:58
Ich hatte die Frage 2012 (https://atnotes.de/index.php/topic,54184.msg349617.html#msg349617) (wohl) schonmal gestellt, damals aber keine Lösung gefunden.

Jetzt stehe ich wieder vor dem Problem:

Ich habe eine Richtext- "Vorlage", die sieht so aus:

Zitat
...
Mob: {CellPhoneNumber}
Fax: {OfficeFaxPhoneNumber}

und diese durchlaufe ich jetzt mittels FindAndReplace und ersetze die Platzhalter. Danach sieht das so aus:

Zitat
...
Mob:
Fax: +49 123 456 789

Grund: Der Benutzer hat kein Handy.
Also wollte ich jetzt die "leere" Mob: Zeiler ersetzen, bekomme aber ums verrecken die Zeilenschaltung nicht zu fassen. Probiert habe ich schon:

Code
		intReplaceCount = intReplaceCount + rtiRange.Findandreplace( "Mob: " & Chr$(0) , "", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
		intReplaceCount = intReplaceCount + rtiRange.Findandreplace( "Mob: " & Chr$(10) , "", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
		intReplaceCount = intReplaceCount + rtiRange.Findandreplace( "Mob: " & Chr$(13) , "", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
		intReplaceCount = intReplaceCount + rtiRange.Findandreplace( "Mob: " & Chr$(13) & Chr$(10) , "", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)

Aber das Ergebnis ist immer das selbe:

Zitat
...

Fax: +49 123 456 789

Hat jemand irgendeine Idee (ausser DXL- Export, Manipulation und Import)?
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Peter Klett am 28.06.18 - 12:20:29
Hast Du Einfluss auf die Vorlage? Dann würde ich nur einen Platzhalter verwenden und die durch eine oder zwei Zeilen ersetzen, je nachdem, welche Nummern vorhanden sind

EDIT: Alternativ die Platzhalter hintereinander schreiben

Mob: {CellPhoneNumber}Fax: {OfficeFaxPhoneNumber}

Gibt es eine Mobilnummer, dann {CellPhoneNumber} durch die Nummer + Zeilenumbruch ersetzen,
falls nicht, dann Mob: {CellPhoneNumber} durch nichts ersetzen. Dabei kann man natürlich auch noch auf das Vorhandensein einer Faxnummer prüfen.

So in der Art machen wir das bei Berichtserstellung mit Worddateien, da werden auch Platzhalter mit Suchen & Ersetzen ausgetauscht. Notwendige Zeilenumbrüche fügen wir bei Bedarf mit ein, aber wir entfernen nie welche, d.h. in der Vorlage gibt es keine Zeilenumbrüche, die vom Inhalt abhängig entfernt werden müssten.

 
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 28.06.18 - 13:12:03
Das könnte ich schon so machen, aber die Vorlagen werden hier von den Admins selbst gepflegt. Ich müsste ihnen dann halt sagen: Bitte ohne Zeilenumbrüche pflegen (oder mit einem Platzhalter für Zeilenumbrüche)... Ist aber halt alles andere als Anwenderfreundlich, wenn das dann so aussieht:
Zitat
{NamePrefix}{DisplayName}
{JobTitle}
Fon: {PhoneNumber}Mob: {MobileNumber}Fax: {FaxPhoneNumber}Mail: {MailAddress}
statt so:
Zitat
{NamePrefix}{DisplayName}
{JobTitle}
Fon: {PhoneNumber}
Mob: {MobileNumber}
Fax: {FaxPhoneNumber}
Mail: {MailAddress}

Und dann sind die Vorlagen halt Richtext, das heisst: Platzhalter und alles drumrum sind formatiert (Farbe, Schriftart, Fett, etc.), darauf muss ich halt auch aufpassen.
UND Ich müsste irgendwo hinterlegen, welche Platzhalter einen Zeilenumbruch erhalten, und welche nicht... Und wenn jemand absichtlich alles in eine Zeile schreibt, geht das wieder schief:
Zitat
Fon: {PhoneNumber} | Mob: {MobileNumber} | Fax: {FaxPhoneNumber}
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Peter Klett am 28.06.18 - 13:38:03
Naja, Du wolltest irgendeine Idee  ;)

Bei uns funktioniert das so, weil wir damit standardisiert Berichte erstellen, und da gibt es nur EINE Vorlage und die Scripte passen genau zu dieser einen Vorlage.

Vermutlich müssen sich die Anwender damit anfreunden, dass es auch leere Zeilen gibt, also z.B. nur "Mob: ". Das soll mal jemand mit einem Serienbrief hinbekommen, dass ganze Zeilen in Abhängigkeit von leeren Daten innerhalb der Zeile verschwinden.

Noch eine andere Idee, falls das wirklich so kriegsentscheidend ist: Verschiedene Vorlagen in Abhängigkeit von vorhandenen oder nicht vorhandenen Daten. Aber da pflegt man sich wohl nen Wolf


EDIT: Dein "Mob: "-Entfernen Verfahren funktioniert ja auch dann nicht, wenn jemand statt "Mob: " "Mobil: " in die Vorlage schreibt
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 28.06.18 - 13:46:40
Dank Dir jedenfalls mal ! ;)

Das mit dem ersetzen der "leeren" Zeilen hätte ich dann natürlich wieder dynamisch gemacht:
Im QuerySave der Schablone den Text Parsen, und dort wo nur <Beliebiger Text>{Platzhalter} in einer Zeile steht, merke ich mir <Beliebiger Text>, damit ich dann

FindAndReplace ( <Beliebiger Text> + NewLine ; "" )

machen kann.

Ich werde mir jetzt erstmal so behelfen, dass der "leere" Text ersetzt wird.

Aus:
Zitat
Tel: +49 123
Mob:
Fax: +49 789

wird dann
Zitat
Tel: +49 123

Fax: +49 789


Das ist wenigstens nicht ganz so "hässlich"...
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Peter Klett am 28.06.18 - 14:01:46
Falls das im Frontend erfolgt, könntest Du dem Suchen&Ersetzen noch ein Sendkeys (ENTF) hinterherschicken, so würde ich das in Word machen
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 28.06.18 - 14:17:56
Ne, wird im Backend zusammengebaut... Aber natürlich auch eine Idee... Ich denke, ich werde das "on the fly" in XML und zurück wandeln... da sind dann Search & Replace Operationen einfacher...
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: ERR am 28.06.18 - 14:34:15
Hallo,

du könntest ja auch noch am Anfang deines Suchbegriffes nach einem Zeilenumbruch zusätzlich suchen und ersetzen...

FindAndReplace ( NewLine + <Beliebiger Text> + NewLine ; "" )

MFG
ERR
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 28.06.18 - 14:44:27
Genau das ist ja das Problem: Das Suchen nach NEWLINE funktioniert nicht, egal in welcher Form... Egal ob am Anfang oder Ende des Suchbegriffs...
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: ERR am 28.06.18 - 15:23:06
Sorry, mein Fehler bei Lesen... Versuch mal zuerst nur die Zeile

Code
intReplaceCount = intReplaceCount + rtiRange.Findandreplace( "Mob: " & Chr$(13) & Chr$(10) , "", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)

ohne die anderen davor machen. Evtl. verliert die Range die Position nach den Zeilen davor...

Im Notes-Forum hab ich das dazu gefunden: http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/07bb4ecfd10f6b248525715c003a7b83?OpenDocument (http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/07bb4ecfd10f6b248525715c003a7b83?OpenDocument)

MFG
ERR
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Peter Klett am 28.06.18 - 15:23:25
Noch eine Idee:

Kannst Du den Inhalt der Vorlage zeilenweise einlesen (bin in diesen "modernen" Richttextmethoden nicht wirklich zuhause)? Dann könntest Du vielleicht diese Zeilen an ein neues Richtextitem anhängen (incl. Formatierung), wenn eine Zeile dann einen Platzhalter enthält, der leer ersetzt werden soll, lässt Du die Zeile einfach weg.
Titel: Re: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...
Beitrag von: Tode am 29.06.18 - 08:31:15
@ERR: Ich habe die natürlich alle einzeln probiert, nicht nacheinander... trotzdem Danke für den Tipp...und die Antwort besagt nur: Mache das so lange, bis Du keine Vorkommnisse mehr findest, geht aber nicht auf das grundsätzliche Problem der Leerzeilen ein.

@Peter: das wäre ne Möglichkeit... Paragraph für Paragraph durchlaufen und nur wenn <> "Leerzeile" (also z.B. "Mob: ") zum anderen Feld hinzufügen...
Das probiere ich mal aus. Danke!