Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   StringReplace-Funktion etwas aufbohren (https://www.delphipraxis.net/211076-stringreplace-funktion-etwas-aufbohren.html)

DieDolly 24. Jul 2022 18:01

StringReplace-Funktion etwas aufbohren
 
Ich übergebe der einen String (Textdatei) und eine Zeichenkette zum ersetzen.
Aus 123 soll dann ABC werden, grob gesagt.

Ich möchte aber gerne, dass nur jene 123 ersetzt werden, die nicht zwischen < und > stehen. "hallo 123 du" soll zu "hallo abc du" werden, aber "hier könnte <irgendetwas stehen 123. mir fällt gerade> nix ein" soll nicht zu "hier könnte <irgendetwas stehen abc. mir fällt gerade> nix ein" werden.

Wie wäre soetwas möglich? Das < und > muss nicht zwangsweise direkt vor oder hinter 123 stehen.

Für Hilfe wäre ich sehr dankbar.

himitsu 24. Jul 2022 18:12

AW: StringReplace-Funktion etwas aufbohren
 
ganz billig:
* mehrmals ersetzen
* <OldPattern> durch einen Platzhalter
* dann OldPattern durch NewPattern
* und am Ende den Platzhalter zurück zu <OldPattern>

in deinem StringReplace:
* zwei mal suchen (PosEx) nach "<123>" und "123"
* nur wenn der aktuelle Treffer nicht von Beiden gefunden wurde, dann ersetzen, ansonsten weitersuchen

* oder nach OldPattern suchen
* dann prüfen, ob < bzw. > davor/dahinter und nur ersetzen, wenn nicht


Oder ganz banal mit RegEx, was Diesbezüglich bereits alles bietet.
Delphi-Referenz durchsuchenTRegEx

DieDolly 24. Jul 2022 18:40

AW: StringReplace-Funktion etwas aufbohren
 
Es ist ja nicht <123> was ich suche. Vor und hinter dem 123 zum < und > kann noch viel anderer Kram stehen. Sonst wäre es ja einfach.

Zitat:

* oder nach OldPattern suchen
* dann prüfen, ob < bzw. > davor/dahinter und nur ersetzen, wenn nicht
Das hatte ich vor weiß aber nicht wie.

Ganz grob erklärt sollen Vorkommen nicht ersetzt werden, wenn die sich innerhalb von html tag klammern befinden. Das kann aber auch mal ein img mit base64-kodierung sein.
Und da habe ich keine Ahnung wie man sowas auch nur annähernd performant umsetzen könnte.

KodeZwerg 24. Jul 2022 19:47

AW: StringReplace-Funktion etwas aufbohren
 
Interessante Thematik.

Meine Theorie:

1. Original String-Kopie per Pos() nach "<" suchen lassen
2. Original String-Kopie von 1 bis #1 in einen neuen kopieren
3. diese neue kopie per StringReplace bearbeiten
4. per Pos() nach ">" suchen
5. diesen mini-string an #3 anheften
6. Original String-Kopie von 1 bis #4 löschen
7. wiederhole ab #1

DieDolly 24. Jul 2022 20:20

AW: StringReplace-Funktion etwas aufbohren
 
Das klingt funktionabel. Es handelt sich hierbei um eine HTML-Datei.
Es können in so einer Datei gerne mehrere base64-img-tags auftauchen und dazu noch normale html-tags.
Ich habe schon überlegt in den Dateien gewisse Abschnitte mit eigenen html-tags zu markieren (ignore-begin, ignore-end) und sowas aber das wäre im Prinzip dasselbe wie mit < und >.

KodeZwerg 24. Jul 2022 20:26

AW: StringReplace-Funktion etwas aufbohren
 
eine html datei kann man doch als xml reinladen und dann in den nodes stringreplace anwenden oder täusche ich mich? (ich mach zu selten etwas mit delphi und html, sorry)

himitsu 24. Jul 2022 20:43

AW: StringReplace-Funktion etwas aufbohren
 
Nein, nur Strict-HTML wäre kompatibel zu XML.

Aber es gibt auch HTML-Komponenten für Delphi.




nochmal: lass das rumgepfusche

* entweder eine HTML-Komponente, welche genau für sowas gedacht ist
* oder RegEx, was durch komplexere Regeln mehr kann
Delphi-Referenz durchsuchenTRegEx.Replace

Echt mal, warum will sich jeder die Arbeit schwerer machen, als es sein muß?
Oder fummelst du durm Ändern eines Pixels in einem TFileStream rum, anstatt im TBitmap.Canvas?

Uwe Raabe 24. Jul 2022 21:07

AW: StringReplace-Funktion etwas aufbohren
 
Zitat:

Zitat von himitsu (Beitrag 1509174)
* oder RegEx, was durch komplexere Regeln mehr kann

Nee jetzt: Using regular expressions to parse HTML: why not?

DieDolly 24. Jul 2022 21:38

AW: StringReplace-Funktion etwas aufbohren
 
Ich lade die HTML-Datei in den HtmlViewer. XML bringt mir am Ende leider nichts.

himitsu 25. Jul 2022 06:25

AW: StringReplace-Funktion etwas aufbohren
 
Ja, darum zuerst HTML-Komponente. :zwinker:

Ansonsten bietet RegEx.Replace das, was jemand im StringReplace suchen wollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz