AGB  ·  Datenschutz  ·  Impressum  







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

CD-Liste in Datei schreiben

Ein Thema von stevewilson · begonnen am 28. Okt 2006 · letzter Beitrag vom 28. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
stevewilson

Registriert seit: 21. Okt 2006
16 Beiträge
 
Delphi 7 Professional
 
#1

CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 12:41
Hallo,

habe wieder ein Problem beim entwickeln meiner Musik-CD-Verwaltung.
Ich will meine CDs, die folgend strukturiert sind...
Delphi-Quellcode:
type
  TCd = class(TObject)
    interpreter : string;
    albumTitle : string;
    genre : string;
    songTitles : TStringList;
  private
    procedure setValues(interpreter, albumTitle, genre : string);
...und in einer Objectlist, die sich "cdList" nennt gespeichert werden, einzeln in eine Datei schreiben:

Delphi-Quellcode:
//speichert CD-Liste in Datei
procedure TForm1.saveCdListToFile(fileName : TFileName);
var
  f : file of TCd;
  i : integer;
  wCd : TCd;
begin
  assignFile(f, fileName);
  reWrite(f);
  for i := 0 to cdList.count - 1 do
  begin
    //kein create notwendig!!!
    wCd := TCd(cdList[i]);
    write(f, wCd);
  end;
  closeFile(f);
end;
Das Schreiben scheint zu klappen, da das folgende Öffnen:


Delphi-Quellcode:
procedure TForm1.Oeffnen1Click(Sender: TObject);
var
  f : file of TCd;
  i : integer;
  rCd : TCd;
begin
  with openDialog1 do
  if execute then
  begin
    assignFile(f, fileName);
    reset(f);
// cdList.free;
// cdList := TObjectList.create;
// cdList.clear;
    for i := 0 to fileSize(f) - 1 do
    begin
      //seek(f, i);
      //rCd := TCd.Create;
      read(f, rCd);
      cdList.add(rCd);
    end;
    closeFile(f);
  end;
  fillStringGrid;
end;
auch funktioniert. Jedoch nicht mehr nach Neustart des Programs. Dann bekomme ich, wenn überhaupt, nur wirkürlich
Daten. Woran liegt es? Ich hab genau gedebuggt, komischerweise schreibt er, obwohl er genau die richtige Zahl an Datensätzen
aus der Datei liest, nichts in die Variable rCd. Wenn ich das auskommentierte einbaue, funktioniert es auch nicht. Auch beim
cdList.clear-Aufruf den ich ja eigentlich brauche, damit beim Lesen ohne Neustart des Programs nicht alles 2 mal in der
Liste steht.

Mein größeres Problem ist jedoch, dass er halt wie gesagt nach Neustart scheinbar nur Müll aus der Datei liest.
Gruß
stevewilson
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 13:30
Hallo,

Irgendwie hab ich den Code nicht ganz durchblickt

Aber im ernst.
Ist es wirklich Sinnvoll, Klassen in die Datei zu speichern?
Bzw. Strings, die nicht in der Größe festgelegt sind?

PS: Muß nicht alles stimmen, was ich daherquassle, bin noch sehr müde...
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
stevewilson

Registriert seit: 21. Okt 2006
16 Beiträge
 
Delphi 7 Professional
 
#3

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 13:59
Wie denn sonst? Mit Records? Wir leben doch schon lange im Zeitalter der Objekt-orientierten Programmierung.
Die Größe begrenzen will ich eigentlich nicht. Wo hast du denn Probleme im Code? Ich seh grade ganz oben fehlt was:
Delphi-Quellcode:
type
  TCd = class(TObject)
    interpreter : string;
    albumTitle : string;
    genre : string;
    songTitles : TStringList;
  private
    procedure setValues(interpreter, albumTitle, genre : string);
    procedure addTitle(songTitles : TStringList);
end;
Auch wenn die prozeduren nicht relevant sind...Wenn ihr das braucht, hier der Code zum "erstellen" einer CD:

Delphi-Quellcode:
//Button "CD hinzufuegen"
procedure TForm1.Button1Click(Sender: TObject);
begin
  cd := TCd.create; //erstelle pro CD neues Objekt
  cd.setValues(edit1.text, edit2.text, edit3.text); //Interpret, etc. eintragen
  cdList.add(cd); //CD in Liste hinzufügen
  with stringGrid1 do
  begin
    //CD in StringGrid einfügen
    cells[0, rowCount - 1] := intToStr(rowCount - 1);
    cells[1, rowCount - 1] := cd.interpreter;
    cells[2, rowCount - 1] := cd.albumTitle;
    cells[3, rowCount - 1] := cd.genre;
    rowCount := rowCount + 1; //StringGrid um neue Zeile erweitern
  end;
  //Markierung aufheben
  stringGrid1.selection := TGridRect(Rect(-1, -1, -1, -1));
end;
Gruß
stevewilson
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#4

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 14:18
Ich würde das mit Record's machen

zB:

Delphi-Quellcode:
type
  TCD packed record
    interpreter:string;
    albumTitle :string;
    genre :string;
    songTitles :string; // TStringList.Text verwenden
  end;
Mit der Methode, wie Du sie verwendest, speicherst Du nur die Adresse der Variable, statt dessen Inhalt.
Sinnvoller wäre es, da Du ohnehin nur Strings speicherst, diese einzel in die Datei zu schreiben.

Edit: Klasse natürlich.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
stevewilson

Registriert seit: 21. Okt 2006
16 Beiträge
 
Delphi 7 Professional
 
#5

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:08
Hmm, gibts da nicht auch probleme, wegen nicht fester Stringgröße.

Außerdem soll ich strikt objektorientiert programmieren. Und records...naja...
Gruß
stevewilson
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#6

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:23
schonmal was von XML gehört?

Ich würde alle Klassen als XML speichern. Da bist Du frei, kannst jederzeit neue Felder hinzufügen, hast keine Größenbeschränkungen usw.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#7

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:30
Ja, würde es geben, wie ich ja oben schon sagte.

Ein Beispiel, was ich meinte.
Delphi-Quellcode:
procedure Save;
   var F:TextFile;
begin
  AssignFile(F, 'FileName');
  ReWrite(F);
  Writeln(F, wCD.interpreter);
  Writeln(F, wCD.albumTitle);
  Writeln(F, wCD.genre);
  Writeln(F, wCD.songTitles); // TStringList.Text;
  CloseFile(F);
end;
Dann gibt's mit der Stringlänge keine Probleme.

PS: Schutzblöcke nicht vergessen
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
stevewilson

Registriert seit: 21. Okt 2006
16 Beiträge
 
Delphi 7 Professional
 
#8

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:34
XML? Ne, das kann ja nicht dein Ernst sein...

Und wenn, wie soll das gehen? Ich wollte schon bei "normaler" FileIO bleiben...

@Sunligth7: Wie separiert TStringList.text den String denn? DA muss es ja n Token dazwischen geben, ich muss doch unterscheiden können, ob da n Leerzeichen kommt oder ein neuer Songtitel. Außerdem muss ich irgendwie die grenze zur nächsten CD ziehen, du speicherst nämlich nur eine...
Gruß
stevewilson
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#9

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:37
na, aber wenn Du writeln(wCD.songTitles) aufrufst, was passiert dann? Dann wird jedenfalls nicht die stringliste geschrieben.

wenn du writeln(wCD.songTitles.Text) aufrufst, dann wird sie zwar geschrieben, du hast aber keine ahnung wo sie endet.

Wie gesagt: Mach es mit XML. Die Datei könnte dann so aussehen:

<cdliste>
<cd interpret="Skream" title="Skream!" genre="Dubstep">
<title nr="1" title="Tortured Soul"></title>
<title nr="2" title="Midnight Request Line"></title>
...
</cd>
...
</cdliste>
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#10

Re: CD-Liste in Datei schreiben

  Alt 28. Okt 2006, 15:43
übrigens würde ich die ganze geschichte nochmal neu überdenken. du brauchst meiner meinung nach folgende Klassen:

TInterpret (Name, Land, Ort, ...)
TInterpreten (enthält alle Interpreten)

TLabel (Name, Website, ...)
TLabels (enthält alle Labels)

TTitel (Interpret, Titel, Label, Jahr, ...)
TTracklisting (enthält mehrere Titel)

TCD (CDTitel, Tracklisting, Erscheinungsjahr, ...)
TCDs (enthält alle CDs)

Etwa so. Und wenn Du das als XML speicherst wirst Du später mal (wenn Dein Wissen gewachsen ist) viele Vorteile haben. Alternativ (und besser noch) nimmst Du gleich eine Datenbank zum Speichern.
  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 10:47 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