Autor Thema: FindAndReplace mit Newline: auch nach 6 Jahren die selbe Frage...  (Gelesen 3882 mal)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Ich hatte die Frage 2012 (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)?
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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.

 
« Letzte Änderung: 28.06.18 - 12:44:58 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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}
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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
« Letzte Änderung: 28.06.18 - 13:42:03 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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"...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Falls das im Frontend erfolgt, könntest Du dem Suchen&Ersetzen noch ein Sendkeys (ENTF) hinterherschicken, so würde ich das in Word machen

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Genau das ist ja das Problem: Das Suchen nach NEWLINE funktioniert nicht, egal in welcher Form... Egal ob am Anfang oder Ende des Suchbegriffs...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
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

MFG
ERR

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
@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!
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz