Autor Beitrag
traceurmicha
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Mo 23.03.09 20:03 
Hey leute,

ich will mir ne Musikbibliothek machen und Speichere Interpret,Titel,Album und Dauer in einer .dat Datei.
Dafür der Quelltext hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Lieder :Datentyp;
    Datei : File of Datentyp;
    i :Integer;
begin
 
AssignFile(Datei, 'lieder.dat');
 rewrite (Datei);
 Seek (Datei,FileSize(Datei));
 
with Lieder do
  begin
   Titel := Edit1.Text;
   Interpret := Edit2.Text;
   Album := Edit3.Text;
   Dauer := Edit4.Text;
   Write (Datei,Lieder);
  end;
  
CloseFile(Datei);
end;


Jetzt hab ich Radiobuttons gemacht um zu sortieren nach welchen Kriterien gesucht werden soll, und wenn der Button 1 angewählt ist soll er suchen ob das was ich bei Titel eingebe in der Datei vorhanden ist und soll das ausgeben unzwar hier:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.BitBtn5Click(Sender: TObject);
var Lieder :Datentyp;
    Datei : File of Datentyp;
    i : Integer;
begin
 AssignFile(Datei, 'lieder.dat');
 Reset(Datei);
 i:=0;
 Seek (Datei,i);
 if RadioButton1.Checked = true then
  with Lieder do
  begin
  For i := 0 to FileSize(Datei) do
    Read(Datei,Lieder);
      if Titel = Edit1.Text then
        ListBox1.Items.Add(Titel + ' von '+Interpret+ ' Album: '+Album+' Dauer: '+Dauer);
  end;
   until EOF (Datei);
 CloseFile(Datei);

end;

da bekomm ich aber immer ne Fehlermeldung!
Kann mir jemand sagen was ich Falsch mache?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 23.03.09 20:10 
Moin!

Du hast noch eine relativ wichtige Angabe vergessen:
user profile icontraceurmicha hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Lieder :Datentyp;
    Datei : File of Datentyp;
    i :Integer;
Zeig bitte erst nochmal die Deklaration deines "Datentyp"s. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
traceurmicha Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Mo 23.03.09 20:22 
Hier ist mal mein gesammter Quelltext
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit4: TEdit;
    Label4: TLabel;
    Panel1: TPanel;
    ListBox1: TListBox;
    Label5: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Label6: TLabel;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    BitBtn5: TBitBtn;
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
Type Datentyp = record
               Titel,Interpret,Album,Dauer: String[255];
               end;

{$R *.dfm}

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

procedure TForm1.BitBtn1Click(Sender: TObject);
var Lieder :Datentyp;
    Datei : File of Datentyp;
    i :Integer;
begin
 AssignFile(Datei, 'lieder.dat');
 rewrite (Datei);
 Seek (Datei,FileSize(Datei));
 with Lieder do
  begin
   Titel := Edit1.Text;
   Interpret := Edit2.Text;
   Album := Edit3.Text;
   Dauer := Edit4.Text;
   Write (Datei,Lieder);
  end;
  CloseFile(Datei);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
BitBtn5.Visible := true;
RadioButton1.Visible := true;
RadioButton2.Visible := true;
RadioButton3.Visible := true;
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
var Lieder :Datentyp;
    Datei : File of Datentyp;
    i : Integer;
begin
 AssignFile(Datei, 'lieder.dat');
 Reset(Datei);
 i:=0;
 Seek (Datei,i);
 if RadioButton1.Checked = true then
  with Lieder do
  begin
  For i := 0 to FileSize(Datei) do
    Read(Datei,Lieder);
      if Titel = Edit1.Text then
        ListBox1.Items.Add(Titel + ' von '+Interpret+ ' Album: '+Album+' Dauer: '+Dauer);
  end;
   until EOF (Datei);
 CloseFile(Datei);

end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin

end;

end.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 23.03.09 22:15 
Moin!
  • Warum muss das unbedingt mit direkten Dateizugriffen gemacht werden? Wenn du das mit einem Array im RAM machen würdest, wäre das sehr viel einfacher!
  • Keine relativen Pfade zu Dateien verwenden, siehe FAQ-Beitrag
  • Was für eine Fehlermeldung wird denn tatsächlich ausgegeben? "Kaputt" wohl kaum... ;)
  • Nicht so vergleichen:
    ausblenden Delphi-Quelltext
    1:
    if RadioButton1.Checked = true then					
    , sondern so: if RadioButton1.Checked then
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
traceurmicha Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Mo 23.03.09 22:26 
an dieser Stelle hier
ausblenden Delphi-Quelltext
1:
2:
end;
   until EOF (Datei);


sagt er mir deklaration erwartet aber until gefunden

und wen ich das end; wegnehme sagt er end erwartet aber until gefunden.

Das mit Arrays hab ich probiert, klar wäre es einfacher aber ich hab zu viele lieder aufm rechner und da würde ich warscheinlich nen stacküberlauf bekommen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 23.03.09 22:33 
Moin!

user profile icontraceurmicha hat folgendes geschrieben Zum zitierten Posting springen:
an dieser Stelle hier
ausblenden Delphi-Quelltext
1:
2:
end;
   until EOF (Datei);
sagt er mir deklaration erwartet aber until gefunden

und wen ich das end; wegnehme sagt er end erwartet aber until gefunden.
Wenn du den Code mal vernünftig einrücken würdest, dann würde dir auffallen, dass du (wahrscheinlich) ein begin zu wenig hast. :?

user profile icontraceurmicha hat folgendes geschrieben Zum zitierten Posting springen:
Das mit Arrays hab ich probiert, klar wäre es einfacher aber ich hab zu viele lieder aufm rechner und da würde ich warscheinlich nen stacküberlauf bekommen.
Wenn du tatsächlich so viele Datensätze verarbeiten willst, dass diese nicht ins RAM passen (wobei ich mal 2GB verfügbaren Speicher unterstelle), dann musst du eh auf eine Datenbank ausweichen, weil du solche Datenmengen nicht mehr mit typisierten Dateien verwalten kannst. Suchvorgänge in dieser Menge Daten auf Basis einer typisierten Daten kannst du dann auch gleich komplett vergessen, das dauert Tage... :shock: (ernsthaft, deshalb Fazit: mach´s mit einem array)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 25.03.09 19:48 
So viele Lieder das es für ein Array zu groß ist? :gruebel: Hast aber eine große Sammlung. :D

Zu dem Laden, das würde ich persönlich so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
      assignfile (datei, lieder.dat);
      reset(datei);
      while not EOF(datei) do 
        begin
      Inc(counter);
      read(datei, lieder[counter]);
        end;

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
traceurmicha Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Do 26.03.09 15:09 
Hey Dude ich hab das mal versucht aber es geht nicht :(

ich will die datei wenn radiobutton1.checked ist nach nem bestimmten Titel durchsuchen und diesen dann in die ListBox ausgeben lassen aber ich bekomme das einfach nicht hin...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 26.03.09 15:41 
Moin!

user profile icontraceurmicha hat folgendes geschrieben Zum zitierten Posting springen:
Hey Dude ich hab das mal versucht aber es geht nicht :(

ich will die datei wenn radiobutton1.checked ist nach nem bestimmten Titel durchsuchen und diesen dann in die ListBox ausgeben lassen aber ich bekomme das einfach nicht hin...
Das ist auch kein Wunder, denn der Code liest die Datei in ein Array ein. ;)

Wie sieht dein aktueller Code aus? Wenn du was verändert hast, was?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.