Besser suchen und ersetzen mit FreePascal

13/09/2007 - 08:10 von Michael Fuchs | Report spam
Hi,

in FreePascal gibt es ja verschieden Möglichkeiten Strings zu
durchsuchen und darin Text zu ersetzen: strutils.AnsiReplaceStr,
oder per regexpr (möglicherweise auch noch mehr oder die gute alte
Handmethode).

Zur Zeit arbeite ich an einer Klasse in der ein String mehrfach
duchsucht und und einzelne Teile ersetzt.

- die Suchparameter sind statisch (also alle Suchkriterien sind beim
Programmieren bekannt)
- es müssen jeweils 1-3 Buchstaben gefunden und durch eine Ziffer
ersetzt werden

Im Moment erscheinen mir die regexpr-Routinen da sinnvoller, da zum
Beispiel die Buchstaben A,B,C,D durch eine 1 erstezt werden sollen, das
ist für mich so überschaubarer zu programmieren.
ABER: Ich weiß nicht, ob so eine regexpr-Suche nicht massig Rechenzeit
und Speicher verbràt. Lieber möchte ich aber mehr tippen und dafür làuft
das Programm hinterher effizienter.
Hat da jemand einen Rat?

mfg
Micha
Meine Wanderungen durch Realitàt und Cyberspace

auf --> http://www.michael-fuchs.net <--
 

Lesen sie die antworten

#1 Wolf Behrenhoff
13/09/2007 - 15:34 | Warnen spam
Michael Fuchs schrieb:
Hi,

in FreePascal gibt es ja verschieden Möglichkeiten Strings zu
durchsuchen und darin Text zu ersetzen: strutils.AnsiReplaceStr,
oder per regexpr (möglicherweise auch noch mehr oder die gute alte
Handmethode).

Zur Zeit arbeite ich an einer Klasse in der ein String mehrfach
duchsucht und und einzelne Teile ersetzt.

- die Suchparameter sind statisch (also alle Suchkriterien sind beim
Programmieren bekannt)
- es müssen jeweils 1-3 Buchstaben gefunden und durch eine Ziffer
ersetzt werden

Im Moment erscheinen mir die regexpr-Routinen da sinnvoller, da zum
Beispiel die Buchstaben A,B,C,D durch eine 1 erstezt werden sollen, das
ist für mich so überschaubarer zu programmieren.
ABER: Ich weiß nicht, ob so eine regexpr-Suche nicht massig Rechenzeit
und Speicher verbràt. Lieber möchte ich aber mehr tippen und dafür làuft
das Programm hinterher effizienter.



Was heißt "massig"? Wie oft machst du die Ersetzung? Ist das zeitkritisch?

Ich programmiere gerne in Perl, da sind regexes ja gleich mit drin. Und
das vermisse ich andauernd, wenn ich dann wieder in Pascal bin :-)

Solange es nicht zeitkritisch ist, lieber den Weg nehmen, der einfacher
ist. Besser eine Regexp. als irgendwelche Verrànkungen mit Pos und
Schleifen, finde ich. Außerdem sind REs leichter zu lesen und schreiben.

Wenn das Suchkriterium aber so einfach ist, dass du nur ein bis drei
(feste) Buchstaben suchst und ersetzen willst, warum dann nicht eine
Schleife? - Meinst du oben mit deinem Beispiel folgendes?

for i:=1 to length(s) do
if s[i] in ['A'..'D'] then s[i]:='1';

Dafür wàre eine RE wirklich übertrieben!

Wolf

Ähnliche fragen