Avatar billede gb_nitram Nybegynder
06. november 2001 - 19:32 Der er 8 kommentarer

Fjern mellemrum i Delphi-streng

Hejsa

Jeg er ved at lave et program der kan fjerne alle mellemrum i en tekst skrevet i en editboks. Teksten (uden mellemrum) flyttes derefter over i en memoboks. Dette er hvad jeg har skrevet, men programmet kører ned, og et eller andet er helt galt, men jeg kan ikke gennemskue hvad det er. Jeg håber der er nogen der kan hjælpe.

På forhånd tak.

var
  Form1: TForm1;
  S : String;
  I : Integer;
implementation

{$R *.DFM}

procedure TForm1.ButtonClick(Sender: TObject);
begin
    S :=  Edit.text;
    Trimleft(S);
    Memo.Clear;
    While S <> \' \' do
          I := 1;
          begin
          While (I<=Length(S)) AND (S[I] <> \' \') do
                begin
                Memo.Lines.Add(Copy(S,1,I));
                Delete(S,1,I);
                S := Trimleft(S);
                Inc(I);
                end;
          end;
End;

end.
Avatar billede gb_nitram Nybegynder
06. november 2001 - 19:33 #1
NB: Det er Delphi 4 jeg arbejder med, hvis det skulle have betydning.
Avatar billede unclebug Nybegynder
06. november 2001 - 19:36 #2
Du kan fjerne dem med Memo1.Text := StringReplace(Edit1.Text, \' \', \'\', [rfReplaceAll]);

Avatar billede dkn Nybegynder
06. november 2001 - 19:49 #3
Du kan bruge den her metode:
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
FoundPos, i: Integer;
begin
s := Edit1.Text;
for i := 1 to Length(s) do
begin
FoundPos := Pos(\' \', s);
if FoundPos <> 0 then
begin
Delete(s, FoundPos, 1);
Insert(\'\', s, FoundPos);
end;
end;
memo1.Text := s;//Hvor teksten skal hend
end;

//Eller bare bruge:
Memo1.text := StringReplace(Edit1.Text, \' \', \'\', [rfReplaceAll]);

som unclebug også skrev:)
Avatar billede zerohero Nybegynder
07. november 2001 - 09:41 #4
For at fjerne mellemrum i en streng:

s := edit1.text;
for i := 0 to length(s) do
if pos(\' \',s) = i then
begin
  delete(s, i ,1);
  insert(\'\',s ,i);
end;
edit1.text := s;

som dkn - bare mindre kode... ;-)
Avatar billede delphi Nybegynder
09. november 2001 - 11:54 #5
Skal vi være krakilere?

Ok - mindre kode:

Begin
  While Pos(\' \', Edit1.Text)<>0 Do Delete(Edit1.Text, Pos(\' \', Edit1.Text), 1);
  Memo1.Lines.Add(Edit1.Text);
End;

Allermindst kode:

Begin
  Memo1.Lines.Add(StringReplace(Edit1.Text, \' \', \'\', [rfReplaceAll]));
End;

Peter
Avatar billede unclebug Nybegynder
09. november 2001 - 11:59 #6
Begin
  Memo1.Lines.Add(StringReplace(Edit1.Text, \' \', \'\', [rfReplaceAll]));
End;

Næh, den holder ikke, for gb_nitram clear memo\'et først, det skal altså ikke add\'es. Så den mindst mulige kode er... Se min første kommentar ;o)
Avatar billede delphi Nybegynder
09. november 2001 - 12:21 #7
Der står at strengen skal \"flyttes derefter over i en memoboks\".  Det læser jeg som om den skal tilføjes, dvs. ADD()\'es, til Memo\'ens indhold.  Det er klart, at hvis dette ikke er tilfældet, dvs. at Memo\'en efter operationen kun skal indeholde den nye streng, så skal man - som du gjorde - bruge memo\'ens Text property....men hvorfor så i det hele taget flytte texten til memo\'en?  Den stod vel godt nok i EditBoxen, efter mellemrum er fjernet.

Anyway: At spilde tid på optimere sin kode på den måde - dvs. med mindst mulige antal linier og antal (lokale) variable på bekostning af læsbarhed mv - er efter min mening et typisk tegn på en anden generations programmør! ;)


Peter
Avatar billede unclebug Nybegynder
09. november 2001 - 12:34 #8
>men hvorfor så i det hele taget flytte texten til memo\'en?  Den stod vel godt nok i EditBoxen, efter mellemrum er fjernet.

Heh, det ved jeg sq ikke :o) Men et spørgsmål er et spørgsmål... Og han clear\'er selv Memo\'et, så derfor må han vel mene at det ikke skal add\'es.

Hvad er en andengenerations programmør?
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