Substrings löschen

17. Dezember 2019 18:13

Hallo liebe NAV Community,

gibt es eine möglichkeit aus einem Text einige html tags zu löschen?

Ich muss von Tabelle A in Tabelle B den kompletten Inhalt übertragen, muss aber vorher aus dem Feld "Text", einige html-tags rausfiltern.

Beispiel:

Von: 0cm 3.5pt; "> <p>Anzahl angefangener Monate nach dem Fälligkeitsdatum.</p></td> </tr> <tr> <td
In: Anzahl angefangener Monate nach dem Fälligkeitsdatum.

LG

Re: Substrings löschen

18. Dezember 2019 08:43

xenomode hat geschrieben:Von: 0cm 3.5pt; "> <p>Anzahl angefangener Monate nach dem Fälligkeitsdatum.</p></td> </tr> <tr> <td
In: Anzahl angefangener Monate nach dem Fälligkeitsdatum.

Du suchst nach delchr.

Re: Substrings löschen

18. Dezember 2019 16:24

Dann würde er auch im Text

d,p und t

löschen.

Re: Substrings löschen

18. Dezember 2019 17:57

Bspw. so:
Code:
StrPos1 := STRPOS(Testtext,'<p>');
Newtext := COPYSTR(Testtext,StrPos1 + 3);
StrPos2 := STRPOS(Newtext,'</p>');
Newtext := COPYSTR(Newtext,1,StrPos2 - 1);

Hinweis zum Bug im Standard: Es wird (zumindest in C/AL) für </p> die Position im String über STRPOS leider nicht korrekt gefunden, wenn <p> dort auch enthalten ist, dann < nehmen (sofern das nicht im Text vorkommt), oder eben wie oben den Anfang abschneiden und im Reststring suchen.

Re: Substrings löschen

19. Dezember 2019 13:48

Der richtige Ansatz dafür wäre meiner Meinung nach RegExp.
Leider unterstützt NAV selbst kein MatchAll.. OnPrem kann das relativ leicht mit .Net umgesetzt werden.
Wenn man aber dem Prinzip treu bleiben möchte kein .net zu verwenden kann man sich auch ne Azurefunction basteln :)

Re: Substrings löschen

19. Dezember 2019 14:16

Bei HTML kommt man mit RegEx nicht wirklich zuverlässig weiter.
https://stackoverflow.com/questions/112 ... g#11230103
https://stackoverflow.com/questions/379 ... -html-tags

Re: Substrings löschen

19. Dezember 2019 17:21

solang deine Tags die du suchst keine Attribute haben funktioniert das ganze ohne Probleme und sogar recht simple
https://regex101.com/r/PcDcjl/1

erst wenn die Tags attribute haben wird es komplizierter, aber auch dann musst du dein regex nur anpassen:
https://regex101.com/r/yWZ3q8/1

Re: Substrings löschen

2. Januar 2020 17:55

Kowa hat geschrieben:Bspw. so:
Code:
StrPos1 := STRPOS(Testtext,'<p>');
Newtext := COPYSTR(Testtext,StrPos1 + 3);
StrPos2 := STRPOS(Newtext,'</p>');
Newtext := COPYSTR(Newtext,1,StrPos2 - 1);

Hinweis zum Bug im Standard: Es wird (zumindest in C/AL) für </p> die Position im String über STRPOS leider nicht korrekt gefunden, wenn <p> dort auch enthalten ist, dann < nehmen (sofern das nicht im Text vorkommt), oder eben wie oben den Anfang abschneiden und im Reststring suchen.


Vielen Dank schonmal dafür.

Allerdings habe ich mehrere '>' und '<' Zeichen im Text.

Beispiel: <p>Beispielsatz</p><p>Beispielsatznr. 2</p><p>Beispielsatznr. 3</p>
Sollte so aussehen: Beispielsatz Beispielsatznr. 2 Beispielsatznr. 3

Sollte ich durchloopen um alle "< und >" zu entfernen? Und wenn ja, wie? Mit einer While-Do oder Repeat-Until Schleife

LG

Re: Substrings löschen

2. Januar 2020 18:24

Hallo,

da einfachste wird sein, den Text per Schleife zu durchlaufen, und bei der Gelegenheit sich zu merken, wenn man sich in einem HTML-Tag befindet ('<' im Text = True,'>' im Text = false)
Code:
For i:=1 to strlen(TextVar) DO BEGIN
  IsInHTMLTAG := Textvar[i] = '<';
  if IsInHTMLTAG and (Textvar[i] = '>') then
    IsInHTMLTAG := FALSE
  ELSE BEGIN
    // Mach was ganz wichtiges mit dem Nutztext
    // z.B. Result += copystr(TextVar,i,1);
  END;
END

Die Zuweisung auf das Flag IsInHTMLTAG musst du wahrscheinlich noch etwas optimieren, damit du die Leerzeichen zwischen den TAGs los wirst, die sicherlich nicht haben willst.
Wenn du OnPrem arbeitest kannst du ja auch mit einem DotNET HTML-Parser benutzen, oder es mit der Codeunit "DotNet_XmlDocument" versuchen, um an Daten heran zu kommen. Das ist wahrscheinlich die einfachste Methode.

Gruß Fiddi