Avatar billede jgthb Nybegynder
24. juni 2007 - 15:02 Der er 5 kommentarer og
1 løsning

edit tal rækkefølge

Hej

Jeg har nogle edit-felter, hvori der står nogle tal, for eksempel således:

14, 18, 04, 19, 02,

Tallene er mellem 01 og 20.

Ved nogen, hvordan jeg kan få tallene sat i rækkefølge?

Mvh
Jonathan
Avatar billede kroning Nybegynder
24. juni 2007 - 15:15 #1
procedure SortTal(Edit : TEdit);
var
    SL : TStringList;
begin
    Edit.Text:=StringReplace(Edit.Text,#32,'',[rfReplaceAll]);
    SL:=TStringList.Create;
  ExtractStrings([','],[],PChar(Edit.Text),SL);
  SL.Sorted:=true;
    Edit.Text:=SL.CommaText;
    SL.Free;
end;

----------------

Kaldes således:
SortTal(Edit);
Avatar billede jgthb Nybegynder
24. juni 2007 - 15:37 #2
takker. det virker fint. men vil lige være sikker på, at jeg forstår det:

I første linje efter begin fjernes mellemrum,ik? (1)
Herefter laves stringlisten. (2)
Linje 3 forstår jeg ikke helt. (3)
Det, som vist er kommet hen i stringlisten, sorteres. (4)
Edit-teksten bliver til den sorterede tekst eller hvad? (5)
Avatar billede kroning Nybegynder
24. juni 2007 - 15:58 #3
(1) Korrekt
(2) Korrekt
(3) ExtractStrings proceduren opdeler en tekst og putter hver del ind i stringlisten, den første parameter (',') angiver at teksten skal deles ved hver komma. Anden parameter benyttes ikke. 3. parameter er teksten dvs. Edit.Text. 4. parameter er den StringList som de enkelte del tekster skal puttes ind i.
Efter at have kørt ExtractString ar du en StringList (SL) som indeholer f.eks.
14
18
04
19
02
(4) Sorted sættes nu til true og stringlisten indeholder nu:
02
04
14
18
19
En strignlist har en property (CommaText) som giver dig en enkelt string som indeholder alle linier fra stringlisten adskilt med et komma, dvs. her får du så:
02,04,14,18,19
Avatar billede jgthb Nybegynder
24. juni 2007 - 16:01 #4
tusind tak. dejligt forklaret. Du er selvfølgelig velkommen til at lægge et svar
Avatar billede kroning Nybegynder
24. juni 2007 - 16:03 #5
ok
Avatar billede hrc Mester
24. juni 2007 - 19:47 #6
Jeg skulle lige give mit besyv med...

uses
  Math;

// Konvertér strengene til heltal før der sammenlignes -> heltalssortering
function CompareAsInt(aList : TStringList; aIndex1, aIndex2 : integer) : integer;
begin
  result := CompareValue(StrToIntDef(aList[aIndex1],0),StrToIntDef(aList[aIndex2],0));
end;

// Delphi 2006+ understøtter for-in konstruktionen
procedure AddStrings(aList : TStringList; const aStrings : array of string);
var
  st : string;
begin
  aList.BeginUpdate;
  try
    for st in aStrings do
      aList.Add(st); // st bliver pudsigt nok read only i en for-in
  finally
    aList.EndUpdate;
  end;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
  List: TStringList;
begin
  List := TStringList.Create;
  try
    AddStrings(List,['14','18','4','19','2']); // Kald min macro

    List.CustomSort(CompareAsInt); // Kald vores egen sammenligningsprocedure
    ListBox.Items.Assign(List); // Kopiér til listbox
  finally
    List.Free;
  end;
end;
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