AGB  ·  Datenschutz  ·  Impressum  







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

Delphi Telefonbuch

Ein Thema von joe.fresh · begonnen am 24. Jun 2003 · letzter Beitrag vom 24. Jun 2003
Antwort Antwort
joe.fresh

Registriert seit: 5. Jun 2003
Ort: Mainz
27 Beiträge
 
Delphi 3 Standard
 
#1

Delphi Telefonbuch

  Alt 24. Jun 2003, 10:58
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]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 24. Jun 2003, 11:24
Luckie hat Recht. Mit untypisierten Dateien, wie bei Dir, wird das nichts.
Gruß
Hansa
  Mit Zitat antworten Zitat
joe.fresh

Registriert seit: 5. Jun 2003
Ort: Mainz
27 Beiträge
 
Delphi 3 Standard
 
#4
  Alt 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);
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#5
  Alt 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:

eintragliste.SavetoFile(filename); Laden:

eintragliste.LoadFromFile(filename);
Mit

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

mfg Daniel
Daniel
  Mit Zitat antworten Zitat
joe.fresh

Registriert seit: 5. Jun 2003
Ort: Mainz
27 Beiträge
 
Delphi 3 Standard
 
#6
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7
  Alt 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
Daniel
  Mit Zitat antworten Zitat
joe.fresh

Registriert seit: 5. Jun 2003
Ort: Mainz
27 Beiträge
 
Delphi 3 Standard
 
#8
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#9
  Alt 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
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:34 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