AGB  ·  Datenschutz  ·  Impressum  







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

Record laden

Ein Thema von grader · begonnen am 25. Mär 2007 · letzter Beitrag vom 28. Mär 2007
Antwort Antwort
Seite 3 von 3     123   
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#21

Re: Record laden

  Alt 26. Mär 2007, 17:56
Records in Dateien zu speichern macht nur in Ausnahmefällen einen Sinn.
Sobald man in einem Record nur eine einzige Variable hinzunimmt, knallts an allen Ecken, da nun die Recordlänge verändert wurde.
Heutzutage (im 21. Jahrhundert) braucht man eine robuste, selbsterklärende Datenstruktur innerhalb der Datei.
Das einfachste sind INI-Dateien.
Deutlich flexibler (aber auch komplexer) sind XML-Dateien.
Für kompakte Datenhaltung kann man auch den Mechanismus von IFF ( http://de.wikipedia.org/wiki/Interchange_File_Format ) abschauen:
Jeder Datenwert besteht aus einer ID (4 Bytes), gefolgt von einer Längenangabe (4 Bytes), gefolgt von den eigentlichen Nutzdaten.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#22

Re: Record laden

  Alt 26. Mär 2007, 18:09
Abgesehn davon, daß an dem Program rein garnichts geht und die CodeFormatierung grad noch so ansatzweise zu erkennen ist .... ähhhhhhh?

Also bei Beenden wirdja versucht 4 einträge zu speichern, selbst wenn das Array leer ist.
Wärend Len aber mit der tatsächlichen Zahl gepeichert wird.
- beim Auslesen kann da also nichts stimmen (Len <> gepeicherte Datensätze)
- gespeichert kann aber sowieso nichts werden, da ja auf nichts zugegriffen wird

die Arraylänge solltest du besser aus dem Array lesen und nicht über eine nichtssagende globale Variable (n) ... vorallem wenn du die Arraygröße nicht anpasst.

Ich dachte ja .. OK, wenn der schon so speichern will, dann füge ich mal ein paar (mindestens 4) Einträge ein, aber Button2Click verreckt ja auch.


Also erstmal wäre es wohl gut, wenn du den Variablen "schöne" Namen gibst, damit man auch weiß wofür die sind.

statt n := n + 1; würde sich eine lokale Variable für "n" anbieten und dann folgendes
Delphi-Quellcode:
n := Length(T);
SetLength(T, n + 1);
OK, also hab ich dann erstmal das globale "n" aus der Unit1 gelöscht und wolte sehn wo das verwendet wurde, aber die erwartete Fehlermeldung "n ist nicht delkariert" kam nicht .. was war das für ein schock, also ich dann in Unit2 noch eine globale Variable mit dem selben Namen fand.

Also ehrlich ... es ist wirklich besser, wenn du erstmal diese Dinge verbesserst, bevor ich hier noch ein paar n's finde
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
grader

Registriert seit: 5. Mär 2007
19 Beiträge
 
Delphi 2005 Personal
 
#23

Re: Record laden

  Alt 26. Mär 2007, 18:19
Danke dir für deine Mühe Chemiker, kanns mir aber erst später anschauen da ich noch für Physik lernen muss

@shmia

Mein eigentliches vorhaben war es in einer XML zu speichern und da gab es auch ein schönes Tutorial irgendwo, doch irgendwie hat bei meiner Delphi Version ein Menüpunkt gefehlt, was das weitere Vorgehen vereitelt hat.. Und da es "nur" ein Projekt für den Informatikunterricht sein soll und wir gerade mal ein Halbjahr in Delphi programmiert haben (mehr schlecht als recht) hab ich mich dann für die Methode entschieden.. Aber wenn das alles läuft werd ich das wohl nochmal in Erwägung ziehen!

@himitsu

Also das gar nichts geht würd ich mal nicht behaupten, dass es ziemlich wirr programmiert ist geb ich zu, da ich andauernd irgendwas geändert habe.. Bin halt Anfänger, da probiert man viel rum und vergisst dann mal hier und da was zu löschen oder bringt Variablen durcheinander!

Werd morgen den Quelltext mal etwas aufräumen, doch was hat es mit den Units 2-6 auf sich? Die hab ich in Delphi entfernt, doch anscheinend ist Unit1 von denen immernoch abhängig!
the grader
  Mit Zitat antworten Zitat
grader

Registriert seit: 5. Mär 2007
19 Beiträge
 
Delphi 2005 Personal
 
#24

Re: Record laden

  Alt 28. Mär 2007, 15:20
Hallo Leute!

Ich bins nochmal, bin grad am aufräumen des Quelltextes und habe schon unnötige bzw. doppelte Variablen entfernt und habe jetzt folgendes Problem bin schon kurz vorm verzweifeln!

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Jahr, Monat, Tag: word;
begin
  SetLength(T, Length(T) + 1);
  DecodeDate(DateTimePicker1.Date, Jahr, Monat, Tag);
  T[Length(T)].J:=Jahr;
  T[Length(T)].M:=Monat;
  T[Length(T)].T:=Tag;
  T[Length(T)].Zh:=Edit1.Text;
  T[Length(T)].Zm:=Edit2.Text;
  T[Length(T)].B:=Edit8.Text;
  T[Length(T)].O:=Edit3.Text;
  T[Length(T)].T1:=Edit4.Text;
  T[Length(T)].T2:=Edit5.Text;
  T[Length(T)].T3:=Edit6.Text;
  T[Length(T)].T4:=Edit7.Text;
  T[Length(T)].P:=IntToStr(p);
  T[Length(T)].N:=RichEdit1.Text;
end;
Bei Form1.Show wird SetLength(T, 0) ausgeführt und er setzt auch nach jedem Klick Length(T) um eins nach oben wie gewollt..

ABER: Irgendwie haut das nicht hin, ich kann einen Eintrag (z.B. T[2].B) nur direkt nach dem erstellen ausgeben, sobald ich wieder einen neuen erstelle gibts er nichts ("") aus!

the grader
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#25

Re: Record laden

  Alt 28. Mär 2007, 15:25
Hallo,

der höchste Index, den du verwenden darfst, hat den Wert High(T), nicht Length(T).

Gruß Hawkeye
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: Record laden

  Alt 28. Mär 2007, 15:48
...soll auch heißen: Ein Element T[Length(T)] gibt es nicht, weil das erste Element bei dynamischen Arrays immer den Index 0 besitzt! Ergo hat das letzte Element den Index: Length(T)-1

T[Length(T)-1] := ....
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
grader

Registriert seit: 5. Mär 2007
19 Beiträge
 
Delphi 2005 Personal
 
#27

Re: Record laden

  Alt 28. Mär 2007, 15:57
Öhm das mit dem High hab ich nicht so ganz verstanden, aber mit T[Length(T)-1] funktioniert es

Danke euch
the grader
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#28

Re: Record laden

  Alt 28. Mär 2007, 16:02
Zitat von grader:
Öhm das mit dem High hab ich nicht so ganz verstanden
Hier ist etwas zum Auffrischen deiner Kenntnisse: DSDT-Link
Insbesondere der Abschnitt "Dynamische Arrays" dürfte in diesem Zusammenhang interessant sein.

Gruß Hawkeye
  Mit Zitat antworten Zitat
grader

Registriert seit: 5. Mär 2007
19 Beiträge
 
Delphi 2005 Personal
 
#29

Re: Record laden

  Alt 28. Mär 2007, 16:10
werds mir mal durchlesen
the grader
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 09:40 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