Einzelnen Beitrag anzeigen

arest

Registriert seit: 27. Sep 2005
Ort: Frankfurt
62 Beiträge
 
Delphi 6 Personal
 
#1

problem beim sortieren einer verketteten liste

  Alt 4. Aug 2009, 23:39
abend allerseits, hab nen problem mit meiner sortieren funktion für eine verkettete liste... hab eine liste, die über eingabefelder mit diverse daten gefüllt wird, welche ich nun über radiobuttons sortieren möchte. hab das sehr ähnlich bei einem anderen projekt schon mal gemacht und da hat es wunderbar funktioniert, jetzt streikt es allerdings :/ hier erst mal was vom code:

Delphi-Quellcode:
//********************************SORTIEREN FUNKTION*********************************
   //nachname
   procedure TForm1.RadioButton1Click(Sender: TObject);
   begin
      nachname:=true;
      vorname:=false;
      kategorie:=false;
      geburtstag:=false;
      sortieren;
   end;
   //vorname
   procedure TForm1.RadioButton2Click(Sender: TObject);
   begin
      nachname:=false;
      vorname:=true;
      kategorie:=false;
      geburtstag:=false;
      sortieren;
   end;
   //kategorie
   procedure TForm1.RadioButton5Click(Sender: TObject);
   begin
      nachname:=false;
      vorname:=false;
      kategorie:=true;
      geburtstag:=false;
      sortieren;
   end;
   //geburtstag
   procedure TForm1.RadioButton6Click(Sender: TObject);
   begin
      nachname:=false;
      vorname:=false;
      kategorie:=false;
      geburtstag:=true;
      sortieren;
   end;
   procedure TForm1.RadioButton3Click(Sender: TObject);
   begin
      sortieren;
   end;
   procedure TForm1.RadioButton4Click(Sender: TObject);
   begin
      sortieren;
   end;
   //sortieren
   procedure sortieren;
   begin
      lauf:=TKnoten.Init;
      if (anfang.nachfolger<>ende)
      then begin
              anfang2:=TKnoten.Init;
              ende2:=TKnoten.Init;
              anfang2.nachfolger:=ende2;
              ende2.vorgaenger:=anfang2;
              if (nachname=true)
              then begin
                      lauf:=anfang;
                      repeat lauf:=lauf.nachfolger;
                         neu2:=TKnoten.Init;
                         neu2.Daten:=lauf.Daten;
                         lauf2:=anfang2;
                         if (Form1.RadioButton3.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.nachname > neu2.Daten.nachname) or (lauf2=ende2);
                              end;
                         if (Form1.RadioButton4.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.nachname < neu2.Daten.nachname) or (lauf2=ende2);
                              end;
                         lauf2.vorgaenger.nachfolger:=neu2;
                         neu2.vorgaenger:=lauf2.vorgaenger;
                         lauf2.vorgaenger:=neu2;
                         neu2.nachfolger:=lauf2;
                      until (lauf=ende.vorgaenger);
                      anfang:=anfang2;
                      ende:=ende2;
                      knoteneinlesen;
                   end;
              if (vorname=true)
              then begin
                      lauf:=anfang;
                      repeat lauf:=lauf.nachfolger;
                         neu2:=TKnoten.Init;
                         neu2.Daten:=lauf.Daten;
                         lauf2:=anfang2;
                         if (Form1.RadioButton3.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.vorname > neu2.Daten.vorname) or (lauf2=ende2);
                              end;
                         if (Form1.RadioButton4.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.vorname < neu2.Daten.vorname) or (lauf2=ende2);
                              end;
                         lauf2.vorgaenger.nachfolger:=neu2;
                         neu2.vorgaenger:=lauf2.vorgaenger;
                         lauf2.vorgaenger:=neu2;
                         neu2.nachfolger:=lauf2;
                      until (lauf=ende.vorgaenger);
                      anfang:=anfang2;
                      ende:=ende2;
                      knoteneinlesen;
                   end;
              if (kategorie=true)
              then begin
                      lauf:=anfang;
                      repeat lauf:=lauf.nachfolger;
                         neu2:=TKnoten.Init;
                         neu2.Daten:=lauf.Daten;
                         lauf2:=anfang2;
                         if (Form1.RadioButton3.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.kategorie > neu2.Daten.kategorie) or (lauf2=ende2);
                              end;
                         if (Form1.RadioButton4.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.kategorie < neu2.Daten.kategorie) or (lauf2=ende2);
                              end;
                         lauf2.vorgaenger.nachfolger:=neu2;
                         neu2.vorgaenger:=lauf2.vorgaenger;
                         lauf2.vorgaenger:=neu2;
                         neu2.nachfolger:=lauf2;
                      until (lauf=ende.vorgaenger);
                      anfang:=anfang2;
                      ende:=ende2;
                      knoteneinlesen;
                   end;
              if (geburtstag=true)
              then begin
                      lauf:=anfang;
                      repeat lauf:=lauf.nachfolger;
                         neu2:=TKnoten.Init;
                         neu2.Daten:=lauf.Daten;
                         lauf2:=anfang2;
                         if (Form1.RadioButton3.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.geburtstag > neu2.Daten.geburtstag) or (lauf2=ende2);
                              end;
                         if (Form1.RadioButton4.Checked=true)
                         then begin
                                 repeat lauf2:=lauf2.nachfolger;
                                 until (lauf2.Daten.geburtstag < neu2.Daten.geburtstag) or (lauf2=ende2);
                              end;
                         lauf2.vorgaenger.nachfolger:=neu2;
                         neu2.vorgaenger:=lauf2.vorgaenger;
                         lauf2.vorgaenger:=neu2;
                         neu2.nachfolger:=lauf2;
                      until (lauf=ende.vorgaenger);
                      anfang:=anfang2;
                      ende:=ende2;
                      knoteneinlesen;
                   end;
      end;
   end;
das interessante ist, dass die sortierung auf nachname und vorname reagiert und soweit funktioniert, allerdings das auf/absteigend was über radiobutton3/4 abgefragt würde komplett ignoriert! knoteneinlesen ist eine procedure um die neu sortierte liste in einen listview zu schreiben (funktioniert fehlerfrei)

any ideas?
  Mit Zitat antworten Zitat