AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls C# StringReplace automatisch - was geht schnell und einfach?
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace automatisch - was geht schnell und einfach?

Ein Thema von Jürgen Thomas · begonnen am 8. Sep 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

StringReplace automatisch - was geht schnell und einfach?

  Alt 8. Sep 2006, 14:02
Hallo,

ich möchte in einer Textdatei eine Reihe von Textteilen ersetzen, z.B.:
Zitat:

1. Satz: ohne Satzbez.
Akademie für alte Musik Berlin
</td>
<td><span class="strong">3'40</span>
</td>
Suche und ersetzen: &auml; durch ä / &ouml; durch ö / &uuml; durch ü usw. Ich habe also zwei konstante Arrays arrSearch und arrReplace, die 'durch' die Textdatei laufen sollen. Welches Verfahren ist dafür das schnellste und einfachste?
  • als String einlesen (für FileStream ist die Dateigröße bekannt) und in einer Schleife für jedes Element von arrSearch/arrReplace bearbeiten, dann den String wieder als Textdatei speichern
  • analog, aber mit RegEx arbeiten (ich habe noch keine Ahnung von RegEx, weiß aber, dass damit Suchen/Ersetzen möglich ist, und muss mich sowieso damit befassen)
  • Oder habt Ihr bessere Vorschläge?
Achtung: Ich habe jetzt nur die Delphi-Begriffe verwendet, werde aber mit C# oder #D unter NET arbeiten! Die Texte sind Schnipsel, die aus HTML-Dateien kommen, aber keine richtigen HTML-Daten!

Danke für Eure Hilfe! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: StringReplace automatisch - was geht schnell und einfach

  Alt 8. Sep 2006, 14:46
Hallo Jürgen,

Zitat:
Die Texte sind Schnipsel, die aus HTML-Dateien kommen, aber keine richtigen HTML-Daten!
das macht mich jetzt aber stutzig, da deine anderen threads zum Thema den Eindruck vermitteln, als wären es durchaus von einem HTTP-Server servierte HTML-Dateien.

Grüße vom marabu
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#3

Re: StringReplace automatisch - was geht schnell und einfach

  Alt 8. Sep 2006, 15:02
Die erstere Methode is IMHO zu bevorzugen. RegEx geht zwar auch, is aber dafür, dass du nur feste Strings durch andere feste Strings ersetzen willst, oversized und dadurch langsamer...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: StringReplace automatisch - was geht schnell und einfach

  Alt 7. Okt 2006, 12:25
Schlussbericht

Ich benutze jetzt tatsächlich String.Replace() mit einem Replace-Array wie folgt:
Code:
StringBuilder Text_Gesamt = new StringBuilder(500000);
//  die genaue Länge kann durch FileInfo vorher bestimmt werden
//  Dateien einlesen durch etwas wie Text_Gesamt.AppendText( File.ReadAllText )
string[] arrReplace = new string[] {
//  Liste übernommen aus: [url]http://de.selfhtml.org/html/referenz/zeichen.htm[/url]
//  Zeichen für Griechisch, Interpunktion, Technik u.ä. habe ich weggelassen
   "", " ",                      
   "&quot;", "\"",
   "&Ccedil;", "Ç",
   "&Egrave;", "È",
//  usw. etwa 120 Paare: zuerst der OldString, dann der NewString
//  (der nicht nur aus einzelnen Zeichen, sondern auch aus Strings bestehen kann)
   "



", "

" };                                    
//  alle Konvertierungen in einem Rutsch:                  
for (int x1 = 0; x1 < arrReplace.Length; x1 += 2 )
   Text_Gesamt.Replace(arrReplace[x1], arrReplace[x1+1]);
Text_Gesamt entsteht durch Einlesen von etwa 100 Textdateien. Obwohl NET Strings als feste Größe behandelt und bei StringBuilder.Replace() ständig im Arbeitsspeicher umkopieren muss, dauert dieser Vorgang mit 120x Suchen/Ersetzen in 400 kB weniger als 1 Sekunde - für einen Arbeitsablauf, der noch viele weitere Prüfungen benötigt, ist das zu vernachlässigen.

Das zur Kenntnis für andere, die ähnliche Verfahren benötigen. Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:07 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