AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi StringReplace "String" durch "[b]String[/b]" ersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace "String" durch "[b]String[/b]" ersetzen

Ein Thema von QStorm · begonnen am 28. Sep 2012 · letzter Beitrag vom 28. Sep 2012
Antwort Antwort
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#1

StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 12:47
Hallo,

Ich möchte ein Wort innerhalb einer Zeichenkette mit bestimmten Styleattributen umgeben. Dabei soll die Groß- und Kleinschreibung auf JEDEN FALL erhalten bleiben.

Beispiel:Wort: ich
Zeichenkette: Ich wusste, dass ich in diesem Punkt falsch lag.
Ersetzen durch: Ich wusste, dass ich in diesem Punkt falsch lag.

Momentan mache ich das mit StringReplace:
Code:
StringReplace(Caption, Highlight, ('[b]' + Highlight + '[/b]'), [rfReplaceAll, rfIgnoreCase])
Leider geht damit die ursprüngliche Groß- und Kleinschreibung verloren.

Fällt euch dafür eine geeignete Lösung ein? Gibt es vielleicht schon eine passende Methode dafür?

Vielen Dank im voraus.

/Steven
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 12:53
Du verwendetst "rfIgnoreCase".

Nimm diesen Parameter weg.

Allerdings musst du dann die funktion einmal mit "Ich" und einmal mit "ich" durchführen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 12:54
Schalt mal die Beachtung der Groß-/Kleinschreibung an
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 13:10
Dein Problem ist das folgende: StringReplace hat keine Möglichkeit, das gefundene Wort mit in die Ersetzung einzubeziehen.

Ich sehe 3 Lösungsvarianten:
  1. Case-Sensitives String-Replace mit möglichen Groß-/Kleinschreibungsvarianten.
    Das sind potenziell exponentiell viele, lassen sich sich vielleicht aber auf häufige Varianten eingrenzen: alles groß, nur Wortanfang groß, alles klein.
  2. Benutzung einer ordentlichen Bibliothek für reguläre Ausdrucke mit Unterstützung für Gruppen
  3. Selber programmieren.

1. ist wahlweise ineffizient oder ungenau, aber schnell implementiert.
2. bedeutet eine zusätzliche Bibliothek, ist aber effizient und einfach.
3. bedeutet Arbeit, ist aber ne saubere Lösung und stand-alone.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (28. Sep 2012 um 13:12 Uhr)
  Mit Zitat antworten Zitat
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#5

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 13:19
Schalt mal die Beachtung der Groß-/Kleinschreibung an
Dann würde er bei "ich" jedoch nicht "Ich" ersetzen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 13:24
@QStorm

Ich hab lange mit Delphi 3 programmiert und das hatte kein StringReplace, also habe ich es mir selber programmiert. So eine Funktion kann man an seine Ansprüche modifizieren. Wenn du Interesse hast, sag Bescheid.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 13:40
Delphi-Quellcode:
Function Capsulate(From:String;const find,l,r:String):String;
var
 F,s:String;
 i,lf:Integer;
begin
   f := Lowercase(From);
   s := Lowercase(find);
   i := pos(s,f);
   while i>0 do
      begin
        Result := Result + Copy(From,1,i-1) +l + Copy(From,i,Length(find)) + r;
        From := Copy(From,i + length(find),length(From));
        f := Lowercase(From);
        i := pos(s,f);
      end;
   REsult := Result + From;
end;


procedure TForm3.Button1Click(Sender: TObject);
begin
    memo2.Text := Capsulate(memo1.Text,'ich','[b]','[/b]')
end;

allerdings wird nicht auch zu nicht, da müsstest Du noch eine Prüfung einbauen ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
QStorm

Registriert seit: 28. Jun 2008
46 Beiträge
 
#8

AW: StringReplace "String" durch "[b]String[/b]" ersetzen

  Alt 28. Sep 2012, 14:01
Delphi-Quellcode:
Function Capsulate(From:String;const find,l,r:String):String;
var
 F,s:String;
 i,lf:Integer;
begin
   f := Lowercase(From);
   s := Lowercase(find);
   i := pos(s,f);
   while i>0 do
      begin
        Result := Result + Copy(From,1,i-1) +l + Copy(From,i,Length(find)) + r;
        From := Copy(From,i + length(find),length(From));
        f := Lowercase(From);
        i := pos(s,f);
      end;
   REsult := Result + From;
end;


procedure TForm3.Button1Click(Sender: TObject);
begin
    memo2.Text := Capsulate(memo1.Text,'ich','[b]','[/b]')
end;

allerdings wird nicht auch zu nicht, da müsstest Du noch eine Prüfung einbauen ...
Wunderbar, vielen Dank

P.S.: nicht auch zu nicht ist gewünscht.
  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 18:09 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