Avatar billede lincoln Nybegynder
09. september 2002 - 17:49 Der er 6 kommentarer og
1 løsning

Fjernelse af sidste char i en string

Jeg har en string i Edit1.text hvor jeg vil have fjernet det sidste tegn. Jeg har lavet denne funktion:

var
  StartText: TCaption;

{burde fjerne sidste tegn i Edit1.text}

if Length(Edit1.text) > 0 then
  begin
  for j := 0 to Length(Edit1.text)-1 do
    StartText[j] := Edit1.text[j];
  Edit1.text := StartText;
  end;
end;

Men det går galt!
Hvorfor?
Avatar billede lincoln Nybegynder
09. september 2002 - 17:50 #1
Hints er bedst, decideret kildekode er kedeligt. Det er til programmering på C-niveau og jeg vil helst finde ud af det selv vha. ledetråde.
Avatar billede dj Nybegynder
09. september 2002 - 18:09 #2
det burde virke hvis du sagde "for j := 0 to Length(Edit1.text)-2" istedet.
Som du gør nu traverserer du jo bare hele strengen og tilføjer al indhold, du glemmer at trække den sidste fra ;)

Derudover har du muligvis et lille problem idet du benytter dig af StartText[j] := <noget> idet at du ikke har angivet en længde på strengen og jeg går udfra at Delphi dermed opfatter strengen som havende en nullværdi. Det burde kunne løses ved f.eks. at lave en setlength(StartText,length(edit1.text)-1); (mener det er sådan den hedder, er lidt rusten når det kommer til pascal ligenu :)

Alternativt, og som nok er en bedre løsning kan du istedet for:
StartText[j] := Edit1.text[j];

anvende:

StartText := StartText + Edit1.text[j];

Så behøver du ikke at tænke på at angive en længde på strengen, eller nullværdier for den sags skyld.

Håber det var til en hjælp, jeg har ikke lige haft mulighed for at selv at afprøve noget af det jeg har foreslået, men det burde virke :)
Avatar billede lincoln Nybegynder
09. september 2002 - 18:39 #3
Det umulige er, at indholdet af edit1.text stadig bliver slettet helt af koden. Det virker som om, den ikke vil sætte StartText og Edit1.text sammen.

De er begge TCaption.
Avatar billede lincoln Nybegynder
09. september 2002 - 18:48 #4
Her er koden med de rettelser, jeg lavede i den:

procedure TForm1.Button20Click(Sender: TObject);
begin
{Fjerner sidste tegn i Edit1.text (aka. backspace)}
if Length(Edit1.text) > 0 then
  begin
  StartText := '';
  for j := 0 to (Length(Edit1.text)-2) do
    // Da der er en null-karakter til sidst, skal der trækkes to fra.
    StartText := StartText + Edit1.text[j];

  Edit1.text := StartText;
  end;
end;
Avatar billede lincoln Nybegynder
09. september 2002 - 19:07 #5
procedure TForm1.Button20Click(Sender: TObject);
begin
{Fjerner sidste tegn i Edit1.text (aka. backspace)}
if Length(Edit1.text) > 1 then  // Programmet går ned hvis " > 2 then..."
  begin
  Setlength(StartText, Length(Edit1.text)-1);
  for j := 0 to (Length(Edit1.text)-1) do
    StartText[j] := Edit1.text[j];

  Edit1.text := StartText;
  end
else
  begin
  Edit1.text := '';
  end;
  j := 0;
end;
Avatar billede lincoln Nybegynder
09. september 2002 - 19:07 #6
Ved brug af Setlength virker det som forventet.

Tak for hjælpen.
Avatar billede freeall Nybegynder
09. september 2002 - 20:10 #7
delete(string,length(string),1);

Edit1.Text := copy(Edit1.Text,1,length(Edit1.Text)-1);

Begge disse skulle gerne virke, og er noget bedre at bruge da du slipper for "tonsvis" af overflødig kode:D

Den øverste tror jeg ikke ville virke med en TEdit, men prøv.
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