Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem Dateiagröße (https://www.delphipraxis.net/125216-problem-dateiagroesse.html)

foerster7892 2. Dez 2008 15:38


Problem Dateiagröße
 
Delphi-Quellcode:
AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.dat');
  if (FileExists('C:\Users\user\Documents\Bücher\111Buchtitel111.dat')) then
  reset(Buecher)
  else
  rewrite(Buecher);
  Groesse:= FileSize(Buecher);//<---- is File of ShortString(dort sind die Namen aller eingetragenen Bücher gespeichert)
  for AlleBuecher := 1 to Groesse do
  begin
    read(Buecher, x);
    Form3.RadioGroup2.Items.Add(x);
  end;
  closefile(Buecher)
end;

allerdings hab ich mitbekommen das FileSize nciht die Anzahl der Elemente die auf der Datei gespeichert sind feststellt sondern einfach nur die größe an sich.

Wie könnte ich die Größe der Elemente in der datei feststellen???

Bernhard Geyer 2. Dez 2008 15:39

Re: Problem Dateiagröße
 
Teile mal die größe der Datei durch die größe eines Eintrags:

Delphi-Quellcode:
Groesse:= FileSize(Buecher) / SizeOf(x);

DeddyH 2. Dez 2008 16:00

Re: Problem Dateiagröße
 
File of ShortString? Wieso nicht einfach eine Textdatei und dann mit TStringlist bearbeiten?

foerster7892 2. Dez 2008 16:17

Re: Problem Dateiagröße
 
ka hab ich erst gehabt und dann geändert weils nciht ging

mkinzler 2. Dez 2008 16:25

Re: Problem Dateiagröße
 
Was bedeutet ging nicht? Fehler?

foerster7892 2. Dez 2008 16:40

Re: Problem Dateiagröße
 
Liste der Anhänge anzeigen (Anzahl: 1)
dann kommt immer fehler 104 und 32 wo genau und so ka hier schaut selbst ich weiß nicht was da falsch läuft

ach und das ich suboptimal programmiere wurde mir schon gesagt lasst es bitte trotzdem so (ich sitz jetzt schon ne ganze weile and dem problem)



ich hab das jetzt nochmal auf textfile geändert

DeddyH 2. Dez 2008 17:14

Re: Problem Dateiagröße
 
Zitat:

Delphi-Quellcode:
  AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.txt');
  if (FileExists('C:\Users\user\Documents\Bücher\111Buchtitel111.txt')) then
  reset(Buecher)
  else
  rewrite(Buecher);
  //von hier
  Groesse:= FileSize(Buecher);
  for AlleBuecher := 1 to 2 do
  begin
    readln(Buecher, x);
    Form3.RadioGroup2.Items.Add(x);
  end;
  //bis hier ist das alles ein Fall für den Reset-Zweig
  closefile(Buecher)


Michael Habbe 2. Dez 2008 17:20

Re: Problem Dateiagröße
 
Zitat:

Zitat von foerster7892
Delphi-Quellcode:
AssignFile(Buecher, 'C:\Users\user\Documents\Bücher\111Buchtitel111.dat');
  if (FileExists('C:\Users\user\Documents\Bücher\111Buchtitel111.dat')) then
  reset(Buecher)
  else
  rewrite(Buecher);
  Groesse:= FileSize(Buecher);//<---- is File of ShortString(dort sind die Namen aller eingetragenen Bücher gespeichert)
  for AlleBuecher := 1 to Groesse do
  begin
    read(Buecher, x);
    Form3.RadioGroup2.Items.Add(x);
  end;
  closefile(Buecher)
end;

allerdings hab ich mitbekommen das FileSize nciht die Anzahl der Elemente die auf der Datei gespeichert sind feststellt sondern einfach nur die größe an sich.

Wie könnte ich die Größe der Elemente in der datei feststellen???


Du arbeitest hier mit einer typisierten Datei. Ein Datensatz, Element, hat die Größe Deiner Typisierung, hier also SizeOf("ShortString"), gibt also 256 Byte.
Die Dateigröße wird bei einem Write immer um diese Größe vergrößert.

Einfacher ist es, einfach durch die Datei zu gehen, ohne for:
Delphi-Quellcode:
  reset(Buecher);
  while not Eof(Buecher) do
  begin
    read(Buecher, x);
    Form3.RadioGroup2.Items.Add(x);
  end;
  closefile(Buecher);
Hierbei spielt die Datensatzgröße keine Rolle, denn nach jedem Read wird der Datensatzzeiger um eins nach vorne gesetzt. Und am Ende der Datei steht dann EOF.

Falls Du Interesse an einem von mir in der MIF-Vorlesung erstellten Beispieles hast, einfach nochmal melden, dann suche ich die Quellen raus. Dort haben wir ein kleines Adressverwaltungsprogramm erstellt, welches mit Records arbeitet.



mfg
Michael

DeddyH 2. Dez 2008 17:29

Re: Problem Dateiagröße
 
Ein Minimalbeispiel hatte ich ihm bereits per PM geschickt (hab wohl mein eigenes Tut nicht gelesen :lol:), aber er möchte von seinem Konzept nicht abweichen. Ich persönlich finde allerdings, wenn man im Laufe der Programmierung merkt, dass bereits der Ansatz Mist war, muss man (zumindest bei kleineren Projekten) auch mal den Mut haben, alles in die Tonne zu treten und neu anzufangen.

foerster7892 2. Dez 2008 17:31

Re: Problem Dateiagröße
 
@michael habbe: ich hab das einfach mal so eingesetzt wie dus gesagt hast (jetzt startets nicht mehr) (im Aufruf Stack wird angezeigt auf die Prozedure kann nicht zugegriffen werden)

@deddyh : ich mach das noch mal neu wenn ich es so fertig bekommen hab (ich hab mich auch darüber gefreut das de mir das geschickt hast (dadurch lernt man immer was dazu))


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.
Seite 1 von 2  1 2      

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