Autor Thema: java.util.regex.* und LotusScript  (Gelesen 8705 mal)

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
java.util.regex.* und LotusScript
« am: 04.03.07 - 15:35:35 »
Ich habe mich heute einmal an Java versucht. Dabei will ich die Möglichkeiten regulärer Ausdrücke auch in LotusScript verwenden. Der kleine Helfer an meiner Seite heisst dabei java.util.regex.*.

Wie im HELP Forum bereits mehrfach beschrieben, scheint es immer wieder Probleme zu geben, die <<tags>> aus einem Richtextfeld zu extrahieren und in einer Liste zu speichern. Ich habe die Hoffnung, daß ich das mit regexp möglicherweise besser in den griff bekommen kann.

Man möge mir vergeben; dies ist mein erster Versuchin Java etwas anderes zu bauen, als ein simples "Hallo Welt". Wahrscheinlich verstosse ich gegen so ziemlich jede Regel der Java Community.

Genug des Vorgeplänkel, hier ist der Code der Klasse regexp:

Code
import java.util.regex.*;

public class regexp {
	
public int count(String line, String patt){
	int i = 0;
    
		Matcher m = Pattern.compile(patt).matcher(line);
		boolean result = m.find() ;
			while (result){
				i ++;
				result = m.find() ;
			}
	
	return i; // returns number of matches found
     }  
 
public String replaceAll (String line , String patt, String replacement) {
 	Pattern p = Pattern.compile (patt) ; 
 	Matcher m = p.matcher (line) ; 
 	StringBuffer sb = new StringBuffer() ; 
 	boolean result = m.find () ; 
 		while (result)   {  
     		m.appendReplacement(sb, replacement) ; 
     		result = m.find () ; 
  		}  
 	m.appendTail(sb) ; 
 	return sb.toString(); // returns the new string 
}

Aufgerufen wird das Ganze mit:

Code
Use "java.regexp"
Uselsx "*javacon"

Code
Sub Click(Source As Button)
	Dim js  As JavaSession
	Dim jc As JavaClass
	Dim re As JavaObject
	Set js = New JavaSession()
	Set jc = js.GetClass("regexp")
	Set re = jc.CreateObject()
	Dim unformattedtext As String
	Dim pattern As String
	
	unformattedtext = | 
	Lieber <<supporter>>,

	du hast heute <<Datum>> mal wieder vergessen, das Ticket ( <<reqNumBer>> ) zu bearbeiten!!
	Pöser Pursche, du. :-)
 	|
	pattern = "<{2}(.[aA-zZ]+?)>{2}"	
	Msgbox re.count(unformattedtext, pattern)
	Msgbox re.replaceAll(unformattedtext, pattern, "ReplacedText")
End Sub

 :o "Da fehlt ja das Error Handling!".  :-P Ja, ich weiss, ich weiss. Aber der Code ist ja auch nur mal eben in 15 Minuten zusammengebraten 
  >:D
« Letzte Änderung: 04.03.07 - 15:46:50 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #1 am: 04.03.07 - 23:45:11 »
Ich habe mich heute einmal an Java versucht. Dabei will ich die Möglichkeiten regulärer Ausdrücke auch in LotusScript verwenden. Der kleine Helfer an meiner Seite heisst dabei java.util.regex.*.
Frage: Ist es ein Problem, wenn/dass das nur unter Notes 7 funktioniert?
Für Java1.3 (Notes 6) müßtest du andere open Source Regex Implementierungen verwenden (zwar unschöner, sollte aber gehen).

Sollte der Code auf einem Client laufen, ist das ok. Auf dem Server ist LS2J ein bischen gefährlich, wegen Memory Leak Problemen. Muß auf jeden Fall gut getestet werden. Es gab auch mal einen guten Blockeintrag.

Man möge mir vergeben; dies ist mein erster Versuchin Java etwas anderes zu bauen, als ein simples "Hallo Welt". Wahrscheinlich verstosse ich gegen so ziemlich jede Regel der Java Community.
Hey. Das ist hier nicht die spanische Inquistion oder Freißlers Reichsgericht.
Zitat
Genug des Vorgeplänkel, hier ist der Code der Klasse regexp:
Da funktioniert eine Menge. Nur wird in der Methode replaceAll alles mit ReplacedText ersetzt? Vielleicht müsste man da in die Klasse eine Map reinschiessen (oder generieren).

Hm. Leider gibts in Java1.4 noch nicht die split() Methode für Strings. Am saubersten wäre es wahrscheinlich jakarta commons lang einzubinden. Ich geh mir aber jetzt die entsprechenden Teile klauen und komme mit einem Vorschlag.
Disclaimer: So arbeite ich normalerweise nicht. Weiss noch nicht mal, ob das mit Apache2 licence erlaubt ist, da einfach Teile aus dem Source rauszukopieren.

Die intelligent geschriebenen Methoden mit den guten Kommentaren sind von apache-jarkarta (StringUtils in commonsLang). Das sieht vielleicht ein bischen abschreckend lang aus, aber das sind ja nur 2 service Methoden unter der Main Methode. Falls das brauchbar ist, kann ich dir sagen, wie du das umbaust und du direkt commons-lang-2-1.jar einbindest. Es geht hier um Wiederverwendbarkeit der Arbeit anderer.


Ich hab die Initialisierung des Patterns in die init() Methode gezogen. Da wird auch die ReplacerMap initiiert. Hab eine Testklasse geschrieben und poste die mit. Die für das Verständnis wichtigen Tests stehen aber auch in der public static void main (String args[])- Methode von der Regexp.  Du kannst die Klasse also einfach starten (aus Eclipse oder mit java Regexp von der Kommandozeile). Da siehst du auch wie die Klasse benutzt werden kann.
a) immer die init Methode nach dem Konstruktor aufrufen (Mit LS2J sind Konstruktoren mit Parametern ein bischen unhandlich, deshalb die init.

Aus diesem String
<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42"
wird eine java.util.Map (ähnlich wie List in LotusScript) generiert. Das wird dann fürs replacement verwendet (mit m.group).
Code
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regexp {
	private Map mapReplacers = new HashMap();
	private String msgLastRunReplaceAll;
	private Pattern p = null;
	
	public void init(String inStrMapReplacers, String pattern) {
		p = Pattern.compile(pattern);
		String [] replacerPairs = split(inStrMapReplacers, ":");
		for (int i=0; i < replacerPairs.length; i++) {
			String[] replacerTokens = split(replacerPairs[i], "~");
			if (replacerTokens.length != 2) {
				throw new RuntimeException("The initializer String for mapReplacers is wrong. Should have 2 tokens separated by '~'. Position: " + replacerPairs[i]);
			}
			mapReplacers.put(replacerTokens[0], replacerTokens[1]);
		}
	}
	
	
	
	public Map getMapReplacers () {
		return mapReplacers;
	}
	
	public String getMsgLastRunReplaceAll() {
		return msgLastRunReplaceAll;
	}
	
	
	public int count(String line) {
		int i = 0;

		Matcher m = p.matcher(line);
		boolean result = m.find();
		while (result) {
			i++;
			result = m.find();
		}

		return i; // returns number of matches found
	}

	public String replaceAll(String line) {
		msgLastRunReplaceAll = "";
		
		Matcher m = p.matcher(line);
		StringBuffer sb = new StringBuffer();
		boolean result = m.find();
		while (result) {
			String toReplace = m.group();
			String replacer = (String) mapReplacers.get(toReplace);
			if (replacer == null) {
				String msg = "Cannot find replacer for " + toReplace + "\n";
				msgLastRunReplaceAll = msgLastRunReplaceAll.length() == 0 ? msg : msgLastRunReplaceAll + "\n" + msg;
				// logger.error("Cannot find replacer for " + toReplace);
				
				m.appendReplacement(sb,toReplace);
			} else {
				m.appendReplacement(sb, replacer);
			}
			
			result = m.find();
		}
		m.appendTail(sb);
		return sb.toString(); // returns the new string
	}
	
// ############## some dirty ad hoc tests ###########################
	public static void main (String args[]) {
		// init some testvalues
		Regexp cut = new Regexp();
		String unformattedText = "\nLieber <<supporter>>,\n\n" +
		"du hast heute <<Datum>> mal wieder vergessen, das Ticket ( <<reqNumBer>> ) zu bearbeiten!!\n\n" +
		"Pöser Pursche, du. :-)";
		String pattern= "<{2}(.[aA-zZ]+?)>{2}";
		
		System.out.println("**test count()**");
		cut.init("", pattern);
		int res = cut.count(unformattedText);
		System.out.println("result =" +  res);
		
		System.out.println("**testReplaceAllSuccess()**");
		cut = new Regexp();
		cut.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern);
		String resStr = cut.replaceAll(unformattedText);
		System.out.println("result =" + resStr);
		System.out.println("for problems in replacement::" + cut.getMsgLastRunReplaceAll());
		
		System.out.println("**testReplaceWithUnknownToReplaceToken()**");
		cut = new Regexp();
		cut.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern);
		resStr = cut.replaceAll("<<thatDoesNotExist>>" + unformattedText);
		
		System.out.println("result=" + resStr);
		System.out.println("for problems in replacement::" + cut.getMsgLastRunReplaceAll());
	}

//********************************************************************
// ############## apache.jakarta.commons ###########################
//********************************************************************	
	 /**
     * <p>Splits the provided text into an array, separators specified.
     * This is an alternative to using StringTokenizer.</p>
     *
     * <p>The separator is not included in the returned String array.
     * Adjacent separators are treated as one separator.
     * For more control over the split use the StrTokenizer class.</p>
     *
     * <p>A <code>null</code> input String returns <code>null</code>.
     * A <code>null</code> separatorChars splits on whitespace.</p>
     *
     * <pre>
     * StringUtils.split(null, *)         = null
     * StringUtils.split("", *)           = []
     * StringUtils.split("abc def", null) = ["abc", "def"]
     * StringUtils.split("abc def", " ")  = ["abc", "def"]
     * StringUtils.split("abc  def", " ") = ["abc", "def"]
     * StringUtils.split("ab:cd:ef", ":") = ["ab", "cd", "ef"]
     * </pre>
     *
     * @param str  the String to parse, may be null
     * @param separatorChars  the characters used as the delimiters,
     *  <code>null</code> splits on whitespace
     * @return an array of parsed Strings, <code>null</code> if null String input
     */
    public static String[] split(String str, String separatorChars) {
        return splitWorker(str, separatorChars, -1, false);
    }
	
	/**
     * Performs the logic for the <code>split</code> and 
     * <code>splitPreserveAllTokens</code> methods that return a maximum array 
     * length.
     *
     * @param str  the String to parse, may be <code>null</code>
     * @param separatorChars the separate character
     * @param max  the maximum number of elements to include in the
     *  array. A zero or negative value implies no limit.
     * @param preserveAllTokens if <code>true</code>, adjacent separators are
     * treated as empty token separators; if <code>false</code>, adjacent
     * separators are treated as one separator.
     * @return an array of parsed Strings, <code>null</code> if null String input
     */
    private static String[] splitWorker(String str, String separatorChars, int max, boolean preserveAllTokens) {
        // Performance tuned for 2.0 (JDK1.4)
        // Direct code is quicker than StringTokenizer.
        // Also, StringTokenizer uses isSpace() not isWhitespace()

        if (str == null) {
            return null;
        }
        int len = str.length();
        if (len == 0) {
        	
            //return ArrayUtils.EMPTY_STRING_ARRAY;
        	return new String[0]; // to make it work: Axel Janssen
        }
        List list = new ArrayList();
        int sizePlus1 = 1;
        int i = 0, start = 0;
        boolean match = false;
        boolean lastMatch = false;
        if (separatorChars == null) {
            // Null separator means use whitespace
            while (i < len) {
                if (Character.isWhitespace(str.charAt(i))) {
                    if (match || preserveAllTokens) {
                        lastMatch = true;
                        if (sizePlus1++ == max) {
                            i = len;
                            lastMatch = false;
                        }
                        list.add(str.substring(start, i));
                        match = false;
                    }
                    start = ++i;
                    continue;
                } else {
                    lastMatch = false;
                }
                match = true;
                i++;
            }
        } else if (separatorChars.length() == 1) {
            // Optimise 1 character case
            char sep = separatorChars.charAt(0);
            while (i < len) {
                if (str.charAt(i) == sep) {
                    if (match || preserveAllTokens) {
                        lastMatch = true;
                        if (sizePlus1++ == max) {
                            i = len;
                            lastMatch = false;
                        }
                        list.add(str.substring(start, i));
                        match = false;
                    }
                    start = ++i;
                    continue;
                } else {
                    lastMatch = false;
                }
                match = true;
                i++;
            }
        } else {
            // standard case
            while (i < len) {
                if (separatorChars.indexOf(str.charAt(i)) >= 0) {
                    if (match || preserveAllTokens) {
                        lastMatch = true;
                        if (sizePlus1++ == max) {
                            i = len;
                            lastMatch = false;
                        }
                        list.add(str.substring(start, i));
                        match = false;
                    }
                    start = ++i;
                    continue;
                } else {
                    lastMatch = false;
                }
                match = true;
                i++;
            }
        }
        if (match || (preserveAllTokens && lastMatch)) {
            list.add(str.substring(start, i));
        }
        return (String[]) list.toArray(new String[list.size()]);
    }
}

Testklasse (junit 3.8:
Code
import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;

/**
 * 
 */

/**
 * @author Axel
 *
 */
public class RegexpTest extends TestCase {

	private String unformattedText;
	private String pattern;
	private Regexp cut = null; 
	
	/**
	 * @param arg0
	 */
	public RegexpTest(String arg0) {
		super(arg0);
		unformattedText = "\nLieber <<supporter>>,\n\n" +
			"du hast heute <<Datum>> mal wieder vergessen, das Ticket ( <<reqNumBer>> ) zu bearbeiten!!\n\n" +
			"Pöser Pursche, du. :-)";
		pattern= "<{2}(.[aA-zZ]+?)>{2}";
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		super.setUp();
		cut = new Regexp();
	}

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#tearDown()
	 */
	protected void tearDown() throws Exception {
		super.tearDown();
	}

	/**
	 * Test method for {@link Regexp#count(java.lang.String, java.lang.String)}.
	 */
	public void testCount() {
		cut.init("", pattern);
		int res = cut.count(unformattedText);
		assertEquals("Its expected to find 3 occurrences.", 3, res);
		
	}

	/**
	 * Test method for {@link Regexp#replaceAll(java.lang.String, java.lang.String, java.lang.String)}.
	 */
	public void testReplaceAllSuccess() {
		cut.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern);
		String res = cut.replaceAll(unformattedText);
		
		System.out.println(res);
		String resExpected = "\nLieber Herr Supporter,\n\n" +
		"du hast heute 19.03.1994 mal wieder vergessen, das Ticket ( 42 ) zu bearbeiten!!\n\n" +
		"Pöser Pursche, du. :-)";
		assertEquals("Its expected for the method to return resExpected", resExpected, res);
		assertEquals("", cut.getMsgLastRunReplaceAll());
		
	}
	
	public void testReplaceWithUnknownToReplaceToken() {
		cut.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern);
		String res = cut.replaceAll("<<thatDoesNotExist>>" + unformattedText);
		
		System.out.println(res);
		String resExpected = "<<thatDoesNotExist>>\nLieber Herr Supporter,\n\n" +
		"du hast heute 19.03.1994 mal wieder vergessen, das Ticket ( 42 ) zu bearbeiten!!\n\n" +
		"Pöser Pursche, du. :-)";
		assertEquals("Its expected for the method to return resExpected", resExpected, res);
		assertEquals("Cannot find replacer for <<thatDoesNotExist>>\n",cut.getMsgLastRunReplaceAll() );
	}
	
	
	public void testInitMapReplacers() {
		cut.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern);
		Map expectedMap = new HashMap();
		expectedMap.put("<<supporter>>", "Herr Supporter");
		expectedMap.put("<<Datum>>", "19.03.1994");
		expectedMap.put("<<reqNumBer>>", "42");
		assertEquals("map should equal expectedMp", expectedMap, cut.getMapReplacers());
		
	}
		

}
« Letzte Änderung: 05.03.07 - 00:31:56 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #2 am: 05.03.07 - 00:01:49 »
Hier noch mal den umfangreichsten Test, wie er aus LS ausgerufen werden könnte (habs nicht getestet): getestet aus Agent:
options:
Code
Option Public
Option Declare
Use "RegexHelper" ' scriptlibrary which contains class Regexp above
Uselsx "*javacon"

initialize:
Code
Sub Initialize       
Dim js  As JavaSession
	Dim jc As JavaClass
	Dim re As JavaObject
	Set js = New JavaSession()
	Set jc = js.GetClass("Regexp")
	Set re = jc.CreateObject()
	Dim unformattedtext As String
	Dim pattern As String
	
	unformattedtext = |
<<doesNotExist>> Lieber <<supporter>>,

du hast heute <<Datum>> mal wieder vergessen, das Ticket ( <<reqNumBer>> ) zu bearbeiten!!
Pöser Pursche, du. :-)
|
' <<doesNotExist>> shows how the replaceAll operation reacts to placeholders not in map (in combination with getMsgLastRunReplaceAll()) 
	pattern = "<{2}(.[aA-zZ]+?)>{2}"
	Call re.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern)
	Msgbox re.count(unformattedtext)
	Msgbox re.replaceAll(unformattedtext)
	Msgbox re.getMsgLastRunReplaceAll() ' für nachrichten über Probleme beim Ersetzen (<<thatDoesNotExist>> nicht in Map).
end sub
« Letzte Änderung: 05.03.07 - 07:31:13 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: java.util.regex.* und LotusScript
« Antwort #3 am: 05.03.07 - 06:17:17 »
Vielen Dank, Axel. Da muss ich mich erst mal wieder durchwühlen  ;D

Im Prinzip brauche ich nur die Platzhalter zwischen den spitzen Klammern <<Platzhalter>>.
Die bekomme ich ja eigentlich schon über die Gruppierung der regex raus.

In "<{2}(.[aA-zZ]+?)>{2}"

ist die erste Gruppe $1 ja das (.[aA-zZ]+?) .
Und dafür bietet mir regex ja schon die entsprechenden Methoden.


Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #4 am: 05.03.07 - 06:48:43 »
Hi,

die Idee ist ja gerade das einfach auszuprobieren (ohne Einbindung von dritt-jars).
Hab jetzt in ca. 3 Minuten eine Beispiel Notes Datenbank geschrieben (s. Attachment)
Der Code für die Java Klasse ist in einer Script Bibliothek vom Typ Java.

Der Agent ist RegexClient. Einfach starten. Nix durchwühlen.

Die Idee ist einfach dem Objekt der Klasse Regexp eine zur Laufzeit erzeugbare "Übersetzungsliste zu geben:
["<<supporter>>" ersetze zu "Herr Supporter"
"<<Datum>>" ersetze zu "19.03.1994"
"<<reqNumBer>>" ersetze zu "42"]

An das Objekt wird das aus LotusScript über die init(..) Methode der Java Klasse übergeben:
Code
Call re.init("<<supporter>>~Herr Supporter:<<Datum>>~19.03.1994:<<reqNumBer>>~42", pattern)
Die init(..) Methode der Klasse erzeugt aus dem String mit den Trennzeichen : und ~ eine java.util.Map, womit sich in replaceAll dann gut arbeiten läßt.
: ist Trenner zwischen zuErsetztend -> ersetzer Paaren.
~ ist Trenner zwischen zuErsetzend und ersetzer.

Das Generieren der Map aus einem String mit Trennzeichen ohne split(..) Methode in java.lang.String (gibts erst ab Java 5) macht nicht wirklich Spaß. Das gute sind dann aber wieder die zahlreichen, qualitativ hochwertigen openSource Bibliotheken für Java.
Um das Deployment erstmal zu vereinfachen habe ich tzböcgst die Methoden
- public static String[] split(String str, String separatorChars)  und
- private static String[] splitWorker(String str, String separatorChars, int max, boolean preserveAllTokens)
aus commons-lang-2-1.jar von jarkarta.commons "geborgt" und in die Klasse kopiert. Man kann aber die jar auch wohl einfach in die Java Skriptbibliothek einbinden (sauberer, auch wenn du nur 2 Methoden brauchst).

Die Initialisierung von Pattern p habe ich auch in die init-Methode gezogen (don't repeat yourself (DRY) Design principle). Das wurde vorher in beiden Methoden count  und replaceAll erzeugt.

Gruß Axel
 
« Letzte Änderung: 05.03.07 - 08:36:56 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #5 am: 05.03.07 - 09:20:05 »

In "<{2}(.[aA-zZ]+?)>{2}"

ist die erste Gruppe $1 ja das (.[aA-zZ]+?) .
Und dafür bietet mir regex ja schon die entsprechenden Methoden.

Vielleicht bin ich schon einen Schritt weiter. Einfach das nsf-Attachment im posting direkt hier drüber abhängen und den Agenten starten.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: java.util.regex.* und LotusScript
« Antwort #6 am: 05.03.07 - 09:23:59 »
Du darfst aber nicht vergessen, daß das eigentliche Replace in einem RichTextFeld stattfindet und nicht in dem übergebenen String.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #7 am: 05.03.07 - 09:30:31 »
Um die Formatierung beizubehalten, kannst du evtl. mit der xml Repräsentation des RichText Feldes arbeiten. Oder NotesRichTextNavigator, etc.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: java.util.regex.* und LotusScript
« Antwort #8 am: 05.03.07 - 09:34:39 »
Zitat
Oder NotesRichTextNavigator

Genau das habe ich ja schon. Aber dein Code hilft mir schon weiter, das Ganze (sauber) umzusetzen
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: java.util.regex.* und LotusScript
« Antwort #9 am: 05.03.07 - 12:02:53 »
Hm. Leider gibts in Java1.4 noch nicht die split() Methode für Strings.

Hm..

Das ist so nicht korrekt in  1.4.2 ist die split Methode sehrwohl vorhanden und das ist ja die Version die in Notes 7.0 integriert ist.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: java.util.regex.* und LotusScript
« Antwort #10 am: 05.03.07 - 12:13:05 »
Das ist so nicht korrekt in  1.4.2 ist die split Methode sehrwohl vorhanden und das ist ja die Version die in Notes 7.0 integriert ist.

Echt.  ??? Gut zu wissen. Ich hab mich vielleicht verguckt. Kann das dann heute abend nochmal umschreiben. Das spart dann die 2 Methoden aus jakarta-commons.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz