Teilstring entfernen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Teilstring entfernen?

Beitrag von Micro »

Hallo zusammen,

ich habe mehrere XML-Dateien in einem Verzeichnis, in denen ich einen Teilstring enfernen möchte.
Die XML-Datei hat 2 Zeilen, wobei die 2. Zeile bis zu 30.000 Zeichen beinhalten kann.

Diese Passage fängt mit <col min="2" max="2" und hört mit einem > auf.
Alles was dazwischen zusätzlich geschrieben ist, muss natürlich auch entfernt werden. Dummerweise ist das jedesmal unterschiedlich.

Ich hab mir das mit dem CreateRegularExpression() angeschaut, komme damit aber nicht klar.
Wer kann mir da helfen?

LG Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Teilstring entfernen?

Beitrag von jacdelad »

Code: Alles auswählen

EnableExplicit
Define TeilString$,start,ende
TeilString$ = ~"Mein TeilString <col min=\"2\" max=\"2\" irgendwas dazwischen >ist ziemlich lang."

start=FindString(TeilString$,~"<col min=\"2\" max=\"2\"")
If start
  ende=FindString(TeilString$,">",start)
  If ende
    TeilString$=Left(TeilString$,start-1)+Right(TeilString$,Len(TeilString$)-ende)
    Debug TeilString$
  Else
    Debug "Endteil nicht gefunden!"
  EndIf
Else
  Debug "Startteil nicht gefunden!"
EndIf
...unter der Voraussetzung, dass das erste Auftreten von ">" das Ende des zu schneidenden Stücks markiert.
Sicher noch verbesserungswürdig, gerade in punkto Geschwindigkeit.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Andesdaf
Moderator
Beiträge: 2659
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Teilstring entfernen?

Beitrag von Andesdaf »

https://regex101.com/r/GRa7wp/1

... falls der zu entfernende Teilstring zwischen <col> und </col> liegt, das ist mir nicht ganz klar.
Win11 x64 | PB 6.00 (x64)
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Teilstring entfernen?

Beitrag von DarkDragon »

Du willst xml attribute entfernen? Dann solltest du das xml traversieren mit den xml funktionen. RegEx ist dafür nicht geeignet. XML ist keine Reguläre Sprache (Chomsky Hierarchie), somit nichts für Reguläre Ausdrücke.

Siehe auch: https://stackoverflow.com/a/1732454

Für schnelle hacks mag das klappen, aber sauber ist es halt nicht. Reguläre Ausdrücke sind zwar auch keine reinen regulären Ausdrücke mehr, aber dennoch eine schlechte Wahl.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Micro
Beiträge: 59
Registriert: 28.12.2006 17:44
Computerausstattung: Intel 10850K, 16GB RAM
div. andere Rechner...
Wohnort: Nordkirchen

Re: Teilstring entfernen?

Beitrag von Micro »

Moin :)

Danke #jacdelad, das Teil funzt. :D :D :allright:
Die Geschwindigkeit ist eigendlich bei dem Teil egal, da maximal 12 Dateien mit je um die 16KB bearbeitet werden sollen.

#DarkDragon, vielen Dank für die Info. Hab's mir gerade unter Favoriten abgespeichert und werd's die Tage mal genauer durcharbeiten. :allright:

LG Frank
PB 5.73 LTS - Win 11 Pro / 64Bit
Antworten