Avatar billede circadian Nybegynder
12. januar 2010 - 16:09 Der er 10 kommentarer og
1 løsning

StringReplace funktion

Hej,

Flere steder i min kode ønsker jeg at udføre en funktion der kan lave StringReplace med funktionens parameter.

Dette er mit første forsøg med at oprette en funktion "fra bunden". Her ses koden for StringReplace (kaldt GrammarCheck) funktionen:

procedure TForm1.GrammarCheck(var f: string);
begin
  f := StringReplace(f,
  ' hej ', ' Hej ', [rfReplaceAll, rfIgnoreCase]);
end;

Og når man trykker på en knap, som befinder sig ved siden af et Edit felt, skal GrammarCheck udføres.

procedure TForm1.Edit1Check(Sender: TObject);
var i: string;
begin
  i := string(Edit1.Text);
  GrammarCheck(i);
  Edit1.Text := i;
end;


Dette ser umiddelbart ud til at virke. Jeg kunne bare godt tænke mig, at det eneste man skulle skrive i Edit1Check for at det blev udført, var:

  GrammarCheck(Edit1.Text);

Kan bare ikke helt få det til at virke. Måske dette kunne virke:

procedure TForm1.GrammarCheck(var f: string);
var
  a : string;
begin
  a := string(f);
  f := StringReplace(f,
  ' hej ', ' Hej ', [rfReplaceAll, rfIgnoreCase]);
  f := a;
end;

procedure TForm1.Edit1Check(Sender: TObject);
var i: string;
begin
  GrammarCheck(Edit1.Text);
end;


Men så siger den "Types of actual and formal var parameters must be identical". Sikkert fordi jeg prøver at skrive "Edit1.Text" som en string variabel, men har ingen anelse om, hvordan det ellers gøres.
Avatar billede kroning Nybegynder
12. januar 2010 - 16:15 #1
Lav din GrammarCheck om til en funktion:

function TForm1.GrammarCheck(f: string) : string;
begin
  Result := StringReplace(f,
  ' hej ', ' Hej ', [rfReplaceAll, rfIgnoreCase]);
end;

kan så kaldes således:

Edit1.Text:=GrammarCheck(Edit1.Text);
Avatar billede vallemanden Nybegynder
12. januar 2010 - 16:16 #2
procedure TForm1.Edit1Check(Sender: TObject);
var i: string;
begin
  Edit1.text:=GrammarCheck(Edit1.Text);
end;
Avatar billede vallemanden Nybegynder
12. januar 2010 - 16:17 #3
nå var lige 1½ min for sent
Avatar billede circadian Nybegynder
12. januar 2010 - 16:34 #4
#1 Det virker!

Hvordan gør jeg så når jeg har adskillige ting, der skal "grammar checkes"?

Fx jeg har lyst til også at gøre således:

  Result := StringReplace(f,
  ' hejsa ', ' Hejsa ', [rfReplaceAll, rfIgnoreCase]);

Men det virker ikke når man bare sætter det ind nedenunder den med "hej".
Avatar billede vallemanden Nybegynder
12. januar 2010 - 16:38 #5
du kan kun have én result i en function
Avatar billede circadian Nybegynder
12. januar 2010 - 16:55 #6
Det kan der være noget om.

Hvordan gøres det så? Har flere end 2 forskellige StringReplace's der skal foretages i samme funktion/procedure.
Avatar billede vallemanden Nybegynder
12. januar 2010 - 17:03 #7
giv heller kroning points og opret nyt spg
Avatar billede circadian Nybegynder
12. januar 2010 - 17:06 #8
Gør jeg så - kroning, smid et svar :)
Avatar billede kroning Nybegynder
12. januar 2010 - 18:12 #9
Et svar.

Mht. dit spørgsmål, hvis jeg forstår det rigtig så kan det vel gøres således:

function TForm1.GrammarCheck(f: string) : string;
begin
  f := StringReplace(f,' hej ', ' Hej ', [rfReplaceAll, rfIgnoreCase]);

Result := StringReplace(f,' hejsa ', ' Hejsa ', [rfReplaceAll, rfIgnoreCase]);
end;
Avatar billede kroning Nybegynder
12. januar 2010 - 18:13 #10
Men hvis du skal have mange StringReplace kald så er et Array med teksterne måske en bedre løsning.
Avatar billede circadian Nybegynder
12. januar 2010 - 18:36 #11
Ok, takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Afdelingschef til GDPR & Tech Regulation

Csis Security Group A/S

Sales Executive

Netcompany A/S

Senior Network Engineer