[Delphi] tekst vervangen

Pagina: 1
Acties:

  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Ik ben bezig met een functie die zorgt dat uit een string speciale stukken code vervangen worden door karakters. Voorbeeld:
code:
1
Hallo,{#BR#}deze regel is regel 2{#BR#}en deze regel is regel 3

moet worden:
code:
1
2
3
Hallo,
deze regel is regel 2
en deze regel is regel 3

Die speciale stukken code wil ik uit een config-bestandje ofzo halen, in ieder geval niet hardcoded gebruiken, want ik wil de gebruiker deze code laten definiëren.
Nu zie je: ik wil {#BR#} vervangen door chr(13) + chr(10). Dit kan ik natuurlijk niet zomaar uit een bestandje ofzo plukken, want dan krijg ik het volgende:
code:
1
Hallo,chr(13) + chr(10)deze regel is regel 2chr(13) + chr(10)en deze regel is regel 3

Wie zegt mij hoe ik dit wel werkend kan maken?

Laat een computer nooit merken dat je gehaast bent.


Verwijderd

Kijk eens in de helpfile van Delphi......

**Kuch**Stringreplace**kuch**

  • SysRq
  • Registratie: December 2001
  • Laatst online: 07:59
Of je gebruikt een TStringList.

Zodra je {br} vindt, een .add doen. :)

-


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Verwijderd schreef op 02 april 2004 @ 16:04:
Kijk eens in de helpfile van Delphi......

**Kuch**Stringreplace**kuch**
Zover was ik wel al hoor... ik nam eigenlijk aan dat jullie dat ook wel begrepen, maar goed, bij deze wat ik had:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  tags: TStringList;
  i: integer;
begin
  tags := TstringList.Create;
  tags.Add('{#BR#}');
  tags.Add(chr(13) + chr(10));
  tags.Add('{#TAB#}');
  tags.Add(chr(9));  
  i := 0;
  while i < tags.Count do
  begin
    tekst := StringReplace(tekst, tags[i], tags[i+1], [rfReplaceAll]);
    i := i + 2;
  end;
  txtTekst.Text := tekst;
end;

Zoals hierboven te zien wordt de TStringList in de code opgebouwd. Dit moet gebeuren met een tekstbestandje (loadFromFile) ofzo. Je kunt dan dus niet zomaar werken met chr(x).

Laat een computer nooit merken dat je gehaast bent.


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
SysRq schreef op 02 april 2004 @ 16:07:
Of je gebruikt een TStringList.

Zodra je {br} vindt, een .add doen. :)
En als ik nu een Tab wil vervangen door chr(9)?? Of andere codes die door de gebruiker zijn gedefinieerd?

[ Voor 12% gewijzigd door bdgroot op 02-04-2004 16:15 ]

Laat een computer nooit merken dat je gehaast bent.


  • SysRq
  • Registratie: December 2001
  • Laatst online: 07:59
Code iets aanpassen:

code:
1
2
3
4
5
6
7
8
9
 [...]
  tags.Add('{#TAB#}');
  tags.Add('9');
  i := 0;
  while i < tags.Count do
  begin
    Edit1.text := StringReplace(Edit1.text, tags[i], chr(StrToInt(tags[i+1])), [rfReplaceAll]);
    i := i + 2;
  end;


Voor een #13#10 heb je dus 2*2 = 4 regels in tags nodig :)

-


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 26-05 22:35

Creepy

Tactical Espionage Splatterer

bdgroot schreef op 02 april 2004 @ 16:12:
[...]

En als ik nu een Tab wil vervangen door chr(9)?? Of andere codes die door de gebruiker zijn gedefinieerd?
Alle tags nummeriek in je config bestand neerzetten en hier zelf chr() omheen zetten had je nog niet aan gedacht? (edit: wat SysRq laat zien dus)

Waarom 1 array waarin je zowel je te zoeken tag en de tag voor het vervangen neerzet? Zou een record of een object i.c.m. met een (descendant van) TObjectList niet wat leesbaarder zijn?

[ Voor 4% gewijzigd door Creepy op 02-04-2004 16:23 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Sla in een tekstbestandje de te vervangen tekst op , en dan de ascii waardes van de nieuwe tekst. Zoiets als
{#BR#}|13,10
{#TAB#}|9
Dit kun je dan in je code vertalen naar je stringlist. Eerts splitten op |, en daarna splitten op ,

  • Knutselsmurf
  • Registratie: December 2000
  • Nu online

Knutselsmurf

LED's make things better

Als ik het goed lees, is het probleem dus niet het vervangen, maar het lezen van de karakters uit een bestand. Om die karakters in een tekst-bestand te zetten, moet je ze coderen. Bijvoorbeeld #13 wordt bij het inlezen van je config-bestand omgezet naar chr(13) enz. Houd er wel rekening mee dat je de mogelijkheid inbouwt om een # letterlijk te gebruiken, bjivoorbeeld door ## in je config-file om te zetten naar een # in je vervangregels.

Als je in je configfile dan bijvoorbeeld ###13 hebt staan, wordt dat na inlezen '#'+chr(13)

- This line is intentionally left blank -


  • bdgroot
  • Registratie: Augustus 2002
  • Laatst online: 27-11-2024
Knutselsmurf schreef op 02 april 2004 @ 16:27:
Als ik het goed lees, is het probleem dus niet het vervangen, maar het lezen van de karakters uit een bestand. Om die karakters in een tekst-bestand te zetten, moet je ze coderen. Bijvoorbeeld #13 wordt bij het inlezen van je config-bestand omgezet naar chr(13) enz. Houd er wel rekening mee dat je de mogelijkheid inbouwt om een # letterlijk te gebruiken, bjivoorbeeld door ## in je config-file om te zetten naar een # in je vervangregels.

Als je in je configfile dan bijvoorbeeld ###13 hebt staan, wordt dat na inlezen '#'+chr(13)
Bedankt, deze oplossing ga ik voorlopig gebruiken, die voldoet in ieder geval aan de eisen, ook als het straks uitgebreid moet worden. Creepy en SysRq, dat is dus ook jullie oplossing als ik het goed begrijp, alleen is ie hier net iets anders uitgelegd?
Ik had trouwens wel aan de oplossing met chr(x) gedacht, maar had even niet het idee dat die voldoende zou zijn voor de uitbreidbaarheid. Met die # ervoor lukt dat wel, want dat is af te vangen. Nogmaals bedankt in ieder geval!

Laat een computer nooit merken dat je gehaast bent.

Pagina: 1