AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace-Funktion etwas aufbohren

Ein Thema von DieDolly · begonnen am 24. Jul 2022 · letzter Beitrag vom 25. Jul 2022
Antwort Antwort
Seite 1 von 3  1 23      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 18:01
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.

Geändert von DieDolly (25. Jul 2022 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 18:12
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Jul 2022 um 18:15 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 18:40
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.

Geändert von DieDolly (24. Jul 2022 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 19:47
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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 20:20
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 >.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 20:26
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)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#7

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 20:43
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Jul 2022 um 20:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#8

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 21:07
* oder RegEx, was durch komplexere Regeln mehr kann
Nee jetzt: Using regular expressions to parse HTML: why not?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: StringReplace-Funktion etwas aufbohren

  Alt 24. Jul 2022, 21:38
Ich lade die HTML-Datei in den HtmlViewer. XML bringt mir am Ende leider nichts.

Geändert von DieDolly (24. Jul 2022 um 22:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#10

AW: StringReplace-Funktion etwas aufbohren

  Alt 25. Jul 2022, 06:25
Ja, darum zuerst HTML-Komponente.

Ansonsten bietet RegEx.Replace das, was jemand im StringReplace suchen wollte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
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