Autor |
Beitrag |
traceurmicha
      
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)
|
Verfasst: 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:
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:
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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 20:10
Moin!
Du hast noch eine relativ wichtige Angabe vergessen:
traceurmicha hat folgendes geschrieben : | 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 
      
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)
|
Verfasst: Mo 23.03.09 20:22
Hier ist mal mein gesammter 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 public 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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:
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 
      
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)
|
Verfasst: Mo 23.03.09 22:26
an dieser Stelle hier
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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.03.09 22:33
Moin!
traceurmicha hat folgendes geschrieben : | an dieser Stelle hier
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.
traceurmicha hat folgendes geschrieben : | 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...  (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
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 25.03.09 19:48
So viele Lieder das es für ein Array zu groß ist?  Hast aber eine große Sammlung.
Zu dem Laden, das würde ich persönlich so machen:
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 
      
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)
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 26.03.09 15:41
Moin!
traceurmicha hat folgendes geschrieben : | 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.
|
|
|