Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Telefonbuch (https://www.delphipraxis.net/5939-delphi-telefonbuch.html)

joe.fresh 24. Jun 2003 10:58


Delphi Telefonbuch
 
Hi!
Ich muss für die Schule ein Adressbuch in Delphi entwerfen
dass die eingelesenen Daten in einem File speichert.
Ich komme aber beim Einlesen Löschen und Abrufen nicht weiter.
Kann mir jemand helfen?

Danke im Voraus!

Joe.Fresh

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    ausgabe: TButton;
    schliessen: TButton;
    ListBox1: TListBox;
    Edit2: TEdit;
    Edit3: TEdit;
    adden: TButton;
    delete: TButton;
    Image1: TImage;
    Edit4: TEdit;
    Label3: TLabel;
    Bevel1: TBevel;
    Button1: TButton;
    Edit5: TEdit;
    procedure ausgabeClick(Sender: TObject);
    procedure schliessenClick(Sender: TObject);
    procedure deleteClick(Sender: TObject);
    procedure addenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
 type
 teintrag=Record
      name,vorwahl,nummer,email:string
      end;
telefonbuch = file;
var
telebuch:array[1..300] of teintrag;
speicherdatei:telefonbuch;

procedure TForm1.ausgabeClick(Sender: TObject);
//Var teledenis:teintrag;
begin


end;

procedure TForm1.schliessenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.deleteClick(Sender: TObject);
var i:integer;
begin
if listbox1.itemindex = -1
then showmessage ('Bitte erst Eintrag markieren')
else showmessage ('Eintrag gelöscht');
for i:=0 to 300 do
begin
if listbox1.itemindex = i
then listbox1.items.delete (i);
end;





end;

procedure TForm1.addenClick(Sender: TObject);
var hilf:string ;i:integer;
begin

hilf:=edit1.text;
if edit1.text=''
then showmessage ('Bitte erst den Namen eingeben')
else listbox1.items.add(hilf);
listbox1.items.count;


with telebuch[i] do






end;




end.
[edit=Luckie]CCode-Tags durch Delphi-Tags ersetzt.[/edit]

Luckie 24. Jun 2003 11:12

Erst mal allegemein: Du solltest dir angewüöhnen deinen Code zu fromatieren. Dann kann man ihn leichter lesen und auch Fehler schneller finden.

Zu deinem Problem: Auf meiner Seite findest du eine Klasse, um mit typisisrten Dateien zu arbeiten. Eventuell kannst du dir da die ein oder andere Anregung holen.

Hansa 24. Jun 2003 11:24

Luckie hat Recht. Mit untypisierten Dateien, wie bei Dir, wird das nichts.

joe.fresh 24. Jun 2003 15:20

Ok Danke euch!
Habe es jetzt ein bischen anders versucht.
Und zwar versuche ich jetzt direkt die Daten in einem
File zu speichern aber ich weiss nich wie ich den
Dateizeiger eine Stelle weiter bewege nachdem ich die
Datei beschrieben habe bzw weiss ich nicht ob die Daten bei mir
Überhaupt gespeichert werden.
Könnt ihr mir da helfen?

Danke!

Joe.Fresh

Code:
hilf:=edit1.text;
if edit1.text=''
then showmessage ('Bitte erst den Namen eingeben')
else listbox1.items.add(hilf);
hilf1:=listbox1.items.count;
assignfile(speicherdatei,'telefonbuch.dat');
{$I-}
reset (speicherdatei);
{$I+}
if ioresult <>0 then rewrite (speicherdatei);
with telebuch do
begin
vorwahl:=edit2.text;
nummer:=edit3.text;
name:=edit1.text;
email:=edit4.text;
write(speicherdatei);
hilf2:=FilePos(speicherdatei);
if hilf2+1=hilf1 then showmessage ('Datei gespeichert');
//edit5.text:= inttostr (hilf2);
closeFile(speicherdatei);

Sanchez 24. Jun 2003 15:31

Du könntest das Laden und Speichern der Daten ganz bequem per StringListen erledigen.

Du hast folgenden Typ, den du speichern willst:

Delphi-Quellcode:
type teintrag=Record
     name,vorwahl,nummer,email:string
end;
Du kannst deine Strings aus dem record z.B. Tab-getrennt als einen String in eine StringListe stopfen. Also ein Telefonbucheintrag - ein StringList-Eintrag.

Speichern kannst du:

Delphi-Quellcode:
eintragliste.SavetoFile(filename);
Laden:

Delphi-Quellcode:
eintragliste.LoadFromFile(filename);

Mit

Delphi-Quellcode:
IniParseString
kannst du den zusammengestopften String wieder in deine record-Strings aufteilen.

mfg Daniel

joe.fresh 24. Jun 2003 15:46

Aha,hört sich gut an.
Das heisst dann ein Eintrag ist eine Stringlist
die dann in dem File gespeichert wird oder?
und beim Auslesen wird alles wieder durch den
Befehl IniParseString aufgeteilt ja?

Wo finde ich die String List
in der Menü Leiste?

Danke im Voraus
joe.fresh

Sanchez 24. Jun 2003 16:57

TStringlist ist keine Kompo sondern eine Klasse.
Verwenden kannst du sie so:
Delphi-Quellcode:
var Liste : TStringList;
    i, px : integer;
begin
  Liste := TStringList.Create;
  Liste.LoadFromFile(dateiname);
Jetzt hast du jede Zeile aus der Datei in einem eigenen Listeneintrag

So kannst du dein record füllen: (#9 also Tabulator ist dein Trennzeichen)
Delphi-Quellcode:
px := 1;
for i:=0 to List.Count - 1 do begin
  telebuch[i].name   := IniParseString(List[i],px,9);
  telebuch[i].vorwahl := IniParseString(List[i],px,#9);
  telebuch[i].nummer := IniParseString(List[i],px,#9);
  telebuch[i].email  := IniParseString(List[i],px,#9);
end;
Liste.Free;

Sorry mir ist grad aufgefallen das IniParseString eine eigene Funktion ist. Sie trennt aber nur den String am Trennzeichen auf:

Delphi-Quellcode:
function IniParseString (const z:string;var px:integer;const TRENN:char):string;
  var i, len :integer;
      h : string;
begin
  len := length (z);
  h := '';
  for i := px to len do begin
    px := px + 1;
    if z[i] = TRENN then begin
      result:= h;
      exit;
    end;
    h := h + z[i];
  end;
  result:= h;
end;
Das zurüchschreiben der Einträge läuft halt genau umgekehrt.

mfg Daniel

joe.fresh 24. Jun 2003 19:22

ok habe das mal alles in mein programm reinkopiert.
aber was ist ein trennzeichen?
was soll ich da denn einfügen?

danke im voraus

Joe.fresh

Sanchez 24. Jun 2003 19:46

'#9' würde sich als Trennzeichen anbieten (Tabulator), du kannst natürlich auch jedes andere Zeichen verwenden (ev. '#',...).

Es dient einfach dazu, dass du die Zeile aus der Datei wieder in die Strings von teintrag aufsplitten kannst. Ohne Trennzeichen weisst du ja nicht, wo ein String aufhört und der nächste beginnt.

mfg Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz