AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen in TMemo sortieren ?

Ein Thema von bommelbongo · begonnen am 27. Apr 2008 · letzter Beitrag vom 29. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
bommelbongo

Registriert seit: 23. Apr 2008
7 Beiträge
 
Delphi 7 Personal
 
#1

Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 15:54
Hallo an alle und danke das ihr es angeklickt habt

Ich hab hir ien kleines Programm welches Namen und Geburtsdaten erfasst in einer Datei speichert und diese datensätze dann in einem Memofeld wieder ausgibt. Jetzt möchte ich die ausgabe noch sortieren so das der geburtstags der als nächstes kommt in der ersten line und der nächste in der 2 usw.
Ich lege den bisherigen quellcode dabei bei. Wäre nett wenn mir einer helfen könnte 8)






Delphi-Quellcode:
unit Geber_u;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ComCtrls, ExtCtrls, Mask, Menus, jpeg;

type
   t_Str30 = string[30]; //string auf maximal 30 zeichen beegrenzen
   t_Daten = Record// record erzeugen
    Name, Vorname, Wohnort : t_Str30; //variablen vom typ string im record
    Geburtsdatum : TDateTime;//variablen vom typ TDateTime im record
  end;
  t_Datei = File of T_Daten;

  Tfrm_geber = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ed_wohnort: TEdit;
    ed_nachname: TEdit;
    me_Ausgabe: TMemo;
    btn_Aufrufen: TButton;
    btn_neu: TButton;
    BitBtn1: TBitBtn;
    btn_speichern: TButton;
    btn_next: TButton;
    ed_vorname: TEdit;
    ed_datum: TMaskEdit;
    ed_geburtsdatum: TMaskEdit;
    btn_zurueck: TButton;
    btn_aendern: TButton;
    btn_loeschen: TButton;
    MainMenu1: TMainMenu;
    ndern2: TMenuItem;
    ndenr1: TMenuItem;
    lschen1: TMenuItem;
    ANFANG1: TMenuItem;
    Image1: TImage;
    btn_naechste: TButton;
    procedure btn_AufrufenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn_speichernClick(Sender: TObject);
    procedure btn_neuClick(Sender: TObject);
    procedure btn_nextClick(Sender: TObject);
    procedure btn_naechsteClick(Sender: TObject);
    procedure btn_zurueckClick(Sender: TObject);
    procedure btn_aendernClick(Sender: TObject);
    procedure btn_loeschenClick(Sender: TObject);
    procedure ndern2Click(Sender: TObject);
    procedure ndenr1Click(Sender: TObject);
    procedure lschen1Click(Sender: TObject);
    procedure ANFANG1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    datum,Gdatum : TDateTime;
  end;

var
  frm_geber: Tfrm_geber;
  meine_Datei : T_Datei;
  meine_Daten : T_Daten;

implementation


{$R *.DFM}
// DATEI ÖFFNEN ****************************************************************
Procedure Datei_oeffnen(Var Datei:T_Datei);

BEGIN

     TRY
        reset(Datei); // Datei existiert schon
     EXCEPT
        rewrite(Datei); // Neue Datei
     END;
END;

// NEUE DATEI ERSTELLEN ********************************************************
PROCEDURE Tfrm_geber.FormCreate(Sender: TObject);

BEGIN
    
   btn_next.visible := false;
     ed_datum.text := DateToStr(date);//aktuelles datum in ed_feld ausgeben
     datum := date;
     me_ausgabe.CLEAR;//memofeld leeren

     ASSIGNFILE(Meine_Datei,'Mayer.Dat');// Datei namen geben

     Datei_oeffnen(Meine_Datei);//Datei öfnnen


end;



// nächster Datensatz lesen ****************************************************

procedure Tfrm_geber.btn_AufrufenClick(Sender: TObject);
begin
      btn_aufrufen.caption := '-->';// beschriftung von btn ändern
      btn_next.visible := false;
      btn_zurueck.Visible := true;
       IF NOT eof(meine_datei) THEN BEGIN
                read(meine_Datei,Meine_Daten); // 1 Datensatz lesen

                ed_nachname.text:= Meine_Daten.Name; // ausgeben
                ed_Vorname.text := Meine_Daten.Vorname ;
                ed_wohnort.text := Meine_Daten.Wohnort;
                ed_Geburtsdatum.text:= datetostr(Meine_Daten.Geburtsdatum);// geburtsdatum in ed_feld ausgeb
                btn_Aufrufen.visible := true;

       END
       ELSE BEGIN
                 showmessage('Dateiende');// meldung ausgeben
                 btn_Aufrufen.visible := false;
                 btn_next.visible := true;
                 btn_zurueck.Visible := false;
                 btn_aendern.visible := false;
                 btn_loeschen.Visible := false;
                 btn_neu.Visible := false;
       END;
END;




// SPEICHERN********************************************************************
PROCEDURE Tfrm_geber.btn_speichernClick(Sender: TObject);
BEGIN

              WITH Meine_Daten DO BEGIN
                 //daten aus ed_feld in variable speichern
                 name := ed_nachname.text;
                 Vorname := ed_vorname.text;
                 wohnort := ed_Wohnort.text;
                 Geburtsdatum := strtodate(ed_Geburtsdatum.text);
               END;
               //satzzeiger auf letzte stelle verschieben
               SEEK(meine_Datei,filesize(meine_datei));
                // Datensatz in Datei schreiben
               write(Meine_Datei, Meine_Daten);
               ed_nachname.text := '';
               ed_vorname.text := '';
               ed_geburtsdatum.text := '';
               ed_wohnort.text := '';
               //SetFocus bewirkt, daß Tastaturereignisse an das Eingabefeld weitergeleitet werden. Dieses erhält den Fokus allerdings nicht, wenn es durch einen Aufruf der Methode Hide ausgeblendet wurde.
               ed_nachname.setfocus
END;




// ERSTER DS AUFRUFEN***********************************************************
PROCEDURE Tfrm_geber.btn_nextClick(Sender: TObject);
BEGIN
btn_next.Visible := false;

btn_speichern.visible := false;
      // satzzeiger auf 0 setzen
      seek(Meine_Datei,0);
     // auf eof prüfen
      IF NOT eof(meine_datei) THEN BEGIN
                ed_nachname.visible := true;
                ed_vorname.visible := true;
                ed_wohnort.visible := true;
                ed_geburtsdatum.visible := true;
                label1.visible := true;
                label2.visible := true;
                label3.visible := true;
                // Datensatz lesen
                read(meine_Datei,Meine_Daten);
                // ausgeben
                ed_Nachname.text:= Meine_Daten.Name;
                ed_Vorname.text := Meine_Daten.Vorname ;
                ed_wohnort.text := Meine_Daten.Wohnort;
                ed_Geburtsdatum.text:= datetostr(Meine_Daten.Geburtsdatum);
                btn_Aufrufen.visible := true;
       END
       ELSE BEGIN
                 btn_aufrufen.visible := false;
                 // meldung ausgeben wenn keine datei vorhanden ist
                 showmessage('keine Daten vorhanden');


       END;
END;


//anstehende gebursttage in memofeld ausgeben***********************************
PROCEDURE Tfrm_geber.btn_naechsteClick(Sender: TObject);
VAR i : integer;
    jahrH,monatH,tagH,jahrG,monatG,tagG :word;
    vorname,nachname,Wohnort : STRING;
    hilf,datum1,datum2 : tdatetime;
BEGIN
  me_ausgabe.Visible := true;
  // me leeren
  me_Ausgabe.Clear;
  // in erste zeiele wir nächste geburtstage ausgegeben
  me_Ausgabe.lines[0] := 'Nächste Geburtstage ' ;
  // leerzeile
  me_Ausgabe.lines.add(' ');
  // in datum wird aktuelles datum geschrieben
  datum := date;
  //satzzeiger auf 0
  seek(meine_Datei,0);

  // schleifenbeginn von 1-ende von datei
  FOR i:=1 TO FileSize(meine_datei) DO BEGIN
  // auf eof prüfen
  IF NOT eof(meine_datei) THEN BEGIN
     // datensatz lensen
     read(meine_Datei,Meine_Daten);

     // daten in variablen schreiben
     
     vorname := meine_daten.Vorname;
     nachname := Meine_Daten.Name;
     Wohnort := meine_daten.wohnort;
     Gdatum := Meine_Daten.Geburtsdatum;
     //datum in jah,tag und monat auspalten

     decodedate(datum,jahrH,monatH,tagH);
     decodedate(Gdatum,jahrG,monatG,tagG);
    
    // wenn der geburtstag schon war dann aktuelles jahr +1 ausgeben
    IF (monatH>monatG) THEN BEGIN
      jahrH := jahrH +1;
      hilf := encodedate(jahrH,monatG,TagG) ;
      me_Ausgabe.lines.add(vorname + ' ' + nachname + ' ' +datetostr(hilf)+ ' '+ wohnort);
      me_Ausgabe.lines.add(' ');// leerzeile
      
    END
     // wenn der geburtstag noch kommt einfach datum ausgeben mi aktuellem jahr
     ELSE BEGIN
      hilf := encodedate(jahrH,monatG,tagG);
      me_ausgabe.lines.add(vorname + ' ' + nachname + ' ' +datetostr(hilf)+ ' '+ wohnort);
      me_Ausgabe.lines.add(' ');//leerzeile
     END;
    END;
  END;
  // satzzeiger auf 0
  seek(Meine_Datei,0);
END;


//zurück blättern **************************************************************
PROCEDURE Tfrm_geber.btn_zurueckClick(Sender: TObject);
 VAR position :integer;
BEGIN


 IF NOT (eof(meine_datei)) AND (filepos(meine_datei)>1)// auf dateiende prüfen
 THEN BEGIN

     position:= filepos(meine_datei)-2;// satzzeigerPOSITION -2
     seek (meine_datei,position) ;// satzzeiger um -2 ZURÜCK SChIEBEN
     read(meine_Datei,Meine_Daten);//datensatz lesen
     ed_Nachname.text:= Meine_Daten.Name;// daten in ed_feld schreiben
     ed_Vorname.text := Meine_Daten.Vorname ;// daten in ed_feld schreiben
     ed_wohnort.text := Meine_Daten.Wohnort;
     ed_Geburtsdatum.text:= datetostr(Meine_Daten.Geburtsdatum);


 END;
 END;


//ändern***********************************************************************
PROCEDURE Tfrm_geber.btn_aendernClick(Sender: TObject);
BEGIN


 WITH Meine_Daten DO BEGIN
    name := ed_nachname.text;// daten in variablen schreiben
    Vorname := ed_vorname.text;
    wohnort := ed_Wohnort.text;
    Geburtsdatum := strtodate(ed_Geburtsdatum.text);// daten in variablen schreiben
 END;
 seek(meine_Datei,filepos(meine_datei)-1);//satzzeiger 1 zurück schieben
 write(Meine_Datei, Meine_Daten); // Datensatz in Datei schreiben


     // button labels etc visible ändern
     ed_vorname.Visible := false ;
     ed_nachname.Visible := false ;
     ed_wohnort.Visible := false ;
     ed_geburtsdatum.Visible := false ;
     label1.Visible := false ;
     label2.Visible := false ;
     label3.Visible := false ;
     label4.Visible := false ;
     btn_aendern.Visible := false;
     btn_aufrufen.visible := false;
     btn_zurueck.Visible := false;
     btn_naechste.visible := true;
     me_ausgabe.visible := true;

END;


//loeschen**********************************************************************
PROCeDURE Tfrm_geber.btn_loeschenClick(Sender: TObject);
VAR
pos1 : integer ;

BEGIN


 pos1 := filepos(meine_datei)-1;// position vom letzten datensatz merken
 seek(meine_datei,(filesize(meine_datei)-1));// satzzeiger auf letzte datei
 WITH Meine_Daten DO BEGIN
  read(meine_datei,meine_daten);// datensatz lesen

  name := Meine_Daten.Name;// daten in variablen schreiben
  vorname := Meine_daten.Vorname;
  wohnort := meine_daten.Wohnort;
  geburtsdatum := meine_daten.Geburtsdatum;

  seek(meine_datei,(filesize(meine_datei)-1));// satzzeiger auf letzte datei
  Truncate(meine_datei);// alle datensätze die noch folgen abschneiden
  seek(meine_datei,pos1);// satzzeiger auf zuvor gemerkte position zurüeck schieben

  write(Meine_Datei, Meine_Daten);// daten schreiben

  meine_daten.vorname := vorname;// in record schreiben alte daten überschreiben
  meine_daten.name := name;
  meine_daten.wohnort := wohnort ;
  meine_daten.geburtsdatum := geburtsdatum;
 END;


     // button labels etc visible ändern
     ed_vorname.Visible := false ;
     ed_nachname.Visible := false ;
     ed_wohnort.Visible := false ;
     ed_geburtsdatum.Visible := false ;
     label1.Visible := false ;
     label2.Visible := false ;
     label3.Visible := false ;
     label4.Visible := false ;
     btn_aufrufen.Visible := false;
     btn_zurueck.Visible := false;
     btn_aendern.Visible := false;
     btn_naechste.visible := true;
     me_ausgabe.visible := true;
     btn_loeschen.visible := false;
     me_ausgabe.visible := false;
     btn_next.visible := false;
END;


//menü speichern****************************************************************
PROCEDURE Tfrm_geber.ndern2Click(Sender: TObject);
BEGIN

     // button labels etc visible ändern
     ed_vorname.Visible := true ;
     ed_nachname.Visible := true ;
     ed_wohnort.Visible := true ;
     ed_geburtsdatum.Visible := true ;
     label1.Visible := true ;
     label2.Visible := true ;
     label3.Visible := true ;
     label4.Visible := true ;
     btn_speichern.Visible := true ;
     btn_speichern.Caption := 'speichern';
     btn_naechste.Visible := false ;
     btn_neu.Visible := true ;
     btn_aendern.Visible := false;
     btn_aufrufen.visible := false;
     btn_next.visible := false;
     me_ausgabe.Visible := false;
END;


//menü ändern*******************************************************************
PROCEDURE Tfrm_geber.ndenr1Click(Sender: TObject);
BEGIN


     // button labels etc visible ändern
     ed_vorname.Visible := true ;
     ed_nachname.Visible := true ;
     ed_wohnort.Visible := true ;
     ed_geburtsdatum.Visible := true ;
     label1.Visible := true ;
     label2.Visible := true ;
     label3.Visible := true ;
     label4.Visible := true ;
     btn_aufrufen.Visible := true;
     btn_loeschen.Visible := false;
     btn_neu.Visible := false;
     btn_zurueck.Visible := false;;
     btn_speichern.Visible := false;
     btn_aendern.Visible := true;
     btn_naechste.visible := false;

     me_ausgabe.visible := false;
END;


//menü löschen******************************************************************
PROCEDURE Tfrm_geber.lschen1Click(Sender: TObject);
BEGIN

     // button labels etc visible ändern
     ed_vorname.Visible := true ;
     ed_nachname.Visible := true ;
     ed_wohnort.Visible := true ;
     ed_geburtsdatum.Visible := true ;
     label1.Visible := true ;
     label2.Visible := true ;
     label3.Visible := true ;
     label4.Visible := true ;
     btn_aufrufen.Visible := true;
     btn_zurueck.Visible := false;
     btn_next.Visible := true;
     btn_aendern.Visible := false;
     btn_naechste.visible := false;
     me_ausgabe.visible := false;
     btn_loeschen.Visible := true;
END;


//menü auf ANFANG***************************************************************
PROCEDURE Tfrm_geber.ANFANG1Click(Sender: TObject);
BEGIN
     // button labels etc visible ändern
     ed_vorname.Visible := false ;
     ed_nachname.Visible := false ;
     ed_wohnort.Visible := false ;
     ed_geburtsdatum.Visible := false ;
     label1.Visible := false ;
     label2.Visible := false ;
     label3.Visible := false ;
     label4.Visible := false ;
     btn_aufrufen.Visible := false;
     btn_zurueck.Visible := false;
     btn_aendern.Visible := false;
     btn_naechste.visible := true;
     btn_next.Visible := false;
     btn_speichern.visible := false;
     btn_neu.Visible := false;
     me_ausgabe.visible := false;;
     btn_loeschen.Visible := false;
END;


// NEU**************************************************************************
PROCEDURE Tfrm_geber.btn_neuClick(Sender: TObject);
BEGIN
                //ed_felder leeren und buttons sichtbar machen
                ed_nachname.visible := true;
                ed_vorname.visible := true;
                ed_wohnort.visible := true;
                ed_geburtsdatum.visible := true;
                label1.visible := true;
                label2.visible := true;
                label3.visible := true;
                ed_nachname.text := '';
                ed_vorname.text := '';
                ed_Wohnort.text := '';
                ed_geburtsdatum.text := '';
                ed_nachname.setfocus;
                btn_speichern.visible := true;


END;
END.//<--- PROGRAMM ENDE
[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:00
Hallo,

erstmal Willkommen in der

1. mal gruessen!
2. dann nicht "fett" schreiben den ganzen Text.
3. Delphi Quelltext formatieren. ups, Sharky war schneller *gg*
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:10
me_Ausgabe.Lines.Sort
  Mit Zitat antworten Zitat
bommelbongo

Registriert seit: 23. Apr 2008
7 Beiträge
 
Delphi 7 Personal
 
#4

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:45
Danke für die antwort doch meine lines kennen die eigenschaft sort leider nicht
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:48
Welche Delphi-Version?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:52
Hallo,

waere es nicht besser, das Memo durch ein Tree oder gar durch eine Datenbank zu ersetzen(Tip: klein aber fein..kbmMemtable); da iss Sort nach allen Regeln der Struktur viel einfacher.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
bommelbongo

Registriert seit: 23. Apr 2008
7 Beiträge
 
Delphi 7 Personal
 
#7

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:53
Delphie Version 7.0 sry doch personal
OH LACUH!!FFF ECKEN!!!
  Mit Zitat antworten Zitat
bommelbongo

Registriert seit: 23. Apr 2008
7 Beiträge
 
Delphi 7 Personal
 
#8

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:54
Hi


Zitat von Der.Kaktus:
Hallo,

waere es nicht besser, das Memo durch ein Tree oder gar durch eine Datenbank zu ersetzen(Tip: klein aber fein..kbmMemtable); da iss Sort nach allen Regeln der Struktur viel einfacher.
bin noch ein blutiger anfänger und hab leider keine ahnung wie ich mit sowas umgehen kann
OH LACUH!!FFF ECKEN!!!
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#9

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:56
Wenn in deiner Datei nur Texte drinstehen, kannst du auch von der typisierten Datei abstand nehmen und den ganzen Spaß im CSV-Format speichern und das per TStringList verwalten.
Delphi-Quellcode:
var
  sList: TStringList;
begin
  sList := TStringList.Create;
  try
    sList.Add ('Müller;Franz;Hannover;31.02.1974');
    sList.Add ('Albrecht;Gustel;Dortmund;15.08.1949');
    sList.Add ('Zeppelin;Ferdinand;Berlin;08.07.1838');
    sList.Add ('Klemens;Klaus;Dresden;07.12.1969');

    sList.SaveToFile ('C:\daten.txt');

    ShowMessage (sList.GetText);

    sList.Clear;

    sList.LoadFromFile ('C:\daten.txt');
    sList.Sort;
    
    ShowMessage (sList.GetText);
  finally
    FreeAndNil (sList);
  end;
end;
Das ist natürlich nur eine rudimentäre Sortierung nach Nachname. Nach dem Laden kannst du die Zeilen anhand des ; trennen und in deinen Record-Typ übergeben. Das Trennen kannst du mit den Stringfunktionen Copy, Pos, Length, Delete machen - oder du suchst mal nach String Explode.
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Variablen in TMemo sortieren ?

  Alt 27. Apr 2008, 16:57
OK, dann such ich mal was einfacheres
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz