Avatar billede remis Nybegynder
14. september 2001 - 02:23 Der er 5 kommentarer og
1 løsning

Slet tekst indtil \".\" forekommer

Hej Xperter

Jeg skal i en streng (pchar) slette al tekst indtil det første \'.\' (punktum) forekommer - punktummet inkl.

Hvordan gør jeg det?

-Remis
Avatar billede morten_s Nybegynder
14. september 2001 - 07:22 #1
Prøv sådan her

procedure TForm1.Button1Click(Sender: TObject);
var
p : Pchar;
s : string;
begin
  p := \'Hesten.er grøn\';
  s := string(p);
  Delete(s, pos(\'.\', s), length(s));
  p := pchar(s);
  Label1.Caption := p;
end;
Avatar billede borrisholt Novice
14. september 2001 - 07:56 #2
morten_s >> Det glæder mig at du har tager det med hesten op. Dog vil jeg gerne bringe et par korrektioner til din løsning ....

I Delphi 3ff kan du altid stoppe en Pchar ind i stedet for en String. Delphi laver sev et type cast. Fordet andet skal du huske at tjekke for om pos retunerer 0 (nul) fordi der ingen . (punktum) er i din streng .... Så derfor skal din løsning se ud som følger :

procedure TForm1.Button1Click(Sender: TObject);
var
  p : Pchar;
  i : Integer
begin
  p := \'Hesten.er grøn\';
  i :=  pos(\'.\', p);
  if i <> 0 then
    Delete(p, i, length(p));
  Label1.Caption := p;
end;

Jens B
Avatar billede morten_s Nybegynder
14. september 2001 - 08:07 #3
Hvis i er 0, er der ikke noget .(punktum), så returnere udtrykket
Delete(s, pos(\'.\', s), length(s));, hele strengen hvilket også er korrekt (gælder min delphi 5)

så ingen grund til i <> 0.

Hvis i skulle blive negativ, ikke fordi jeg kan se hvordan det skulle lade sig gøre, så returnere
Delete(s, pos(\'.\', s), length(s)); hele strengen, hvilket hypotetisk må anses for rigtigt, idet det ikke eksisterende angivende punktum jo må eksistere før strengen.

Hvis i > length(s) så returnere delphi hele strengen.

Det eneste Delphi \"Brokker\" sig over er hvis nogen skulle få den ide at sætte en pchar ind
på strengens plads i delete (gælder min Delphi 5 version), derfor er det din løsning som er forkert. Prøv selv Jens ;-)))

Avatar billede borrisholt Novice
14. september 2001 - 08:20 #4
Du har sq ret. Jeg huskede ikke lige det var en Const Stirng som Delete tog ind :-)

Jens B
Avatar billede remis Nybegynder
14. september 2001 - 23:49 #5
uhm.. det gør det omvendte af hvad jeg vil have det til. Det sletter alt efter punktumet. Det skulle være før punktumet.
Avatar billede remis Nybegynder
15. september 2001 - 05:24 #6
Jeg fandt selv ud af det...

procedure TForm1.Button1Click(Sender: TObject);
var
  p : Pchar;
  s : string;
  a, muh : Integer;
begin
  p := \'Koen.er orange\';
  s := string(p);
  a := pos(\'.\', s);
  for muh := 0 to a do delete(s, 1, 1);
  p := pchar(s);
end;

-Remis
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