Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi stringreplace aber wie weiter? (https://www.delphipraxis.net/64441-stringreplace-aber-wie-weiter.html)

Headi 3. Mär 2006 18:00


stringreplace aber wie weiter?
 
Hallo Leute,

Ich habe folgendes Problem,
Ich habe ein Programm, in dem es Felder hat für angaben.
Wenn ich jetzt auf OK klicke dann kommt ein neues Fenster und dort steht dann ein
BBCode um die Daten z.B. in ein Forum wie hier einzufügen.

Jetzt möchte ich aber für die Ausgabe verschiedene Styles haben.
Ich würde das jetzt so machen:
  • auserhalb des programmes sind die Style Dateien
  • in denen werde ich platzhalter einsetzen z.B. {Name} oder {Adresse}
  • diese dateien lade ich und ersetze dann die Platzhalter mit stringreplace durch die vom Benutzer eingegebenen Daten

das wäre dann genau so wie ich mir das vorgestellt habe.
Und das funktioniert ja auch, aber ich habe eine Gruppe an Feldern die spezifisch für eine Option angepasst werden können.
Also so:

Normale Daten, wie Name, Vorname, Strasse... //bleiben immer

Spezifische Daten das heisst wenn der Benutzer im Programm auswählt das er 10 jahre alt ist,
kommen z.B. (Schule, Lehrer/in, Noten... oder was auch immer)
Wählt der Benutzer allerdings 30 Jahre, sollte dann auch in der Ausgabe z.B. (Beruf, Lohn, Arbeitsort...) kommen.

Nur wie stelle ich das jetzt ein, das genau ein block Spezifisch immer ändert?

Das Problem ist ja, dass das alles in dieser Style datei stehen muss.
Ich habe auch schon eine Version gemacht, in der wird der Style vom Programm aus generiert, das heisst dann auch das der Benutzer keine eigenen Styles machen kann, weil ich das sonst immer zuerst in's Programm einfügen hätte müssen :lol: (komischer satz)


Naja viel text und nicht viel dahinter...

Jetzt könnt ihr mir vielleicht helfen, oder mir gleich eine ganz neue Methode vorschlagen?

bitte bitte bitte bitte :thumb: :thumb:


so vielen dank schonmal

schönen Abend noch und ein schönes Weekend !!!

greez Headi

Mr_G 3. Mär 2006 19:01

Re: stringreplace aber wie weiter?
 
Wie wäre es wenn du dir so Tag-artig Bereiche definierst und die dann je nach belieben anzeigst.
z.B.:
Code:
{start:kind}
...{Alter}...
...{Schule}...
...{etc.}...
{ende:kind}
Wenn du dann den Start eines Bereichs gefunden hast suchst du nach dem Ende und kannst den gesamten Bereich z.B. ausblenden.

Headi 3. Mär 2006 22:54

Re: stringreplace aber wie weiter?
 
Zitat:

Zitat von Mr_G
Wie wäre es wenn du dir so Tag-artig Bereiche definierst und die dann je nach belieben anzeigst.
z.B.:
Code:
{start:kind}
...{Alter}...
...{Schule}...
...{etc.}...
{ende:kind}
Wenn du dann den Start eines Bereichs gefunden hast suchst du nach dem Ende und kannst den gesamten Bereich z.B. ausblenden.

Hi Mr_G,

vielen dank erstmal!!
Nicht schlecht die idee.
Also ich habe mir mal diesen Code hier gebastelt,
nur irgendwie ist der ein bisschen umständlich.
Das müsste ich dann ja für jeden block machen...

so hier mal mein code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
If ComboBox1.Itemindex = 0 then
begin
with RichEdit1 do
  while FindText('{point}', 0, Length(RichEdit1.Text), [])<> -1 do
    begin
    SelStart := FindText('{point}', 0, Length(RichEdit1.Text), []);
    SelLength := FindText('{/point}', 0, Length(RichEdit1.Text), [])+8-Selstart;
    SelText := Copy(RichEdit1.Text,SelStart+8,SelLength-15);
    end;
end
else
begin
with RichEdit1 do
  while FindText('{point}', 0, Length(RichEdit1.Text), [])<> -1 do
    begin
    SelStart := FindText('{point}', 0, Length(RichEdit1.Text), []);
    SelLength := FindText('{/point}', 0, Length(RichEdit1.Text), [])+8-Selstart;
    SelText := Copy(RichEdit1.Text,SelStart+8,0);
    end;
end;
end;
kann man den irgendwie noch ein bisschen optimieren, vereinfachern und verkleinern? :lol:

vielen dank schonmal

mfg headi

Headi 5. Mär 2006 11:37

Re: stringreplace aber wie weiter?
 
Hey leute

Kann wirklich keiner helfen?
Irgendwie muss man den code doch noch einfacher hinkriegen oder?

also ich meine ich habe ja ca. 5 verschiedene spezifische kategorien,
muss ich jetzt für jede kategorie diesen langen code benutzen??

Hier nochmals der Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
If ComboBox1.Itemindex = 0 then
begin
with RichEdit1 do
  while FindText('{point}', 0, Length(RichEdit1.Text), [])<> -1 do
    begin
    SelStart := FindText('{point}', 0, Length(RichEdit1.Text), []);
    SelLength := FindText('{/point}', 0, Length(RichEdit1.Text), [])+8-Selstart;
    SelText := Copy(RichEdit1.Text,SelStart+8,SelLength-15);
    end;
end
else
begin
with RichEdit1 do
  while FindText('{point}', 0, Length(RichEdit1.Text), [])<> -1 do
    begin
    SelStart := FindText('{point}', 0, Length(RichEdit1.Text), []);
    SelLength := FindText('{/point}', 0, Length(RichEdit1.Text), [])+8-Selstart;
    SelText := Copy(RichEdit1.Text,SelStart+8,0);
    end;
end;
end;
vielen dank schonmal

mfg headi

Flare 5. Mär 2006 20:28

Re: stringreplace aber wie weiter?
 
Hi Headi!

Also ich würde sagen dass dieser Code nicht wirklich umständlich ist. Ich benutze zwar nicht FindText() sonder Pos(), aber das dürfte nix an der Länge ändern. Also ich finde den Code von dir völlig in Ordnung.

Hier noch mal mein Code, den ich immer zum Ersetzen verwende:
Delphi-Quellcode:
position := Pos(suchtext, text);
if (position<length(text)) AND (position>0) then
begin
  Delete(text, position, length(suchtext));
  Insert(ersatztext, text, position);
end;

Mfg Flare

Ferber 5. Mär 2006 20:36

Re: stringreplace aber wie weiter?
 
Wenn Du Dir das ganze noch in eine Unit schmeisst (zb: MyStrUtils) ist es perfekt.

Delphi-Quellcode:
function StrReplace(st, s1, s2:String):String;
:)

Headi 6. Mär 2006 12:14

Re: stringreplace aber wie weiter?
 
Achso wenn das so ist :mrgreen:

Dann vielen dank!!
Ich werde das dann mal so lassen :thumb:


Also nochmals vielen dank an alle die geholfen haben

und noch einen schönen Tag

greez Headi


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz