Autor Beitrag
Kaoro-kun Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win XP
Delphi 7, Pascal
BeitragVerfasst: Mi 23.08.06 05:56 
Du bedenkst aber nicht die Einschränkung der Typintegrierten Variablen bzw des Arrays...
Das MUSS ja irgendwo nen Haltepunkt haben, und wenn der Überschritten ist, wird weder gelesen noch gespeichert...sicher, die For-Schleife ist dahingehend sehr Variabel, aber das Array irgendwann nicht mehr...so sehe Ich das zumindest.
Regards,
Kao

_________________
Wissen ist Macht. Nichts Wissen macht nichts. Aber nichts zu Wissen, hat nichts mit Intelligenz zu tun. ;)
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 23.08.06 09:40 
Stichwort variable Arrays ;) Es ist nicht wirklich beschränkt. Nur wenn dir der Speicher auf dem Rechner ausgeht (oder eben bei MAX_INT)...


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Kaoro-kun Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win XP
Delphi 7, Pascal
BeitragVerfasst: Mi 23.08.06 12:42 
Also Ich bekam immer Fehlermeldungen, wenn Ich weder die Felder noch das Array einschränken wollte. ._.
Regards,
Kao

_________________
Wissen ist Macht. Nichts Wissen macht nichts. Aber nichts zu Wissen, hat nichts mit Intelligenz zu tun. ;)
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 23.08.06 17:28 
Beschränke das Array doch so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
   AnArray: Array of TMyRecord;
   f: file of TMyRecord;
begin
   AssignFile(f, FileName);
   Reset(f);
   SetLength(AnArray, FileSize(f)); //array so lang machen wie die Datei lang ist
                                    //bei Gelegenheit einfach größer machen mit:
   SetLength(AnArray, Length(AnArray)+1);
   for i:=0 to FileSize(f)-1 do
       Read(f, AnArray[i]);
   CloseFile(f);
end;

Das ganze ist ein Dynamischer Array und seine Größe lässt sich jederzeit variieren. Du siehst: Du kannst write(f, xx) so oft ausführen, wie du grade Lust dazu hast bzw. so oft, wie der Record auf deine Festplatte passt. Folglich ist die Größe tatsächlich nur vom verfügbaren Speicherplatz begrenzt.
Falls du immernoch Probleme hast, schreib uns :gruebel: kann mir kaum vorstellen, dass das nicht geht.
PS: Eine untypisierte Datei ist folgendes: var f: file; du siehst, du arbeitest mit einer typisierten ^^

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Kaoro-kun Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win XP
Delphi 7, Pascal
BeitragVerfasst: Mi 23.08.06 17:32 
Hm...erstmal muss Ich mich für den Tipp bedanken.
Wobei Ich da eine Frage hab...dieses Setlength da zwischendrin...das +1 bringts ja net wirklich, aber könnte Ich nicht auch irgendwo zwischendrin eine If-Abfrage so ähnlich Formulieren? Oder könnte Ich es nicht dauerhaft so einrichten, das er das Array immer so groß macht wie die Datei? Also Ich meine, das das Array immer dann größer wird, wenn die Datei auch größer wird? Oder muss Ich da sozusagen einen Moment "abpassen"?

Was die Typisierung angeht, da muss Ich wohl in der Schule was verwechselt haben... :oops:

Aber kommen wir zu dem Problem, was dieses Update für mich so Unmöglich macht; das Datensatz ändern.
Ich habe, denke Ich, eine Lösung gefunden, wie Ich den Datensatz, der in der Listbox gefiltert wird, aus dem Array herauszulesen, und in die Edits zu schreiben, dennoch wird immer wieder der erste Datensatz in die Edits gesetzt..Ich habs 2, 3 mal mit Einzelschrittabarbeitung probiert und sehe keinen Fehler...Ich will mal sehen, das Ich weiter unten die relevanten Quelltexte kopiere, vielleicht findet ihr ja den Fehler...

ausblenden 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:
procedure TForm6.FormActivate(Sender: TObject);
begin
 Form1.Enabled:=false;
 c:=form1.listbox.ItemIndex;
 read(f,a[c]);
 edit1.Text:=a[c].name;
 edit2.Text:=a[c].vorname;
 edit3.Text:=a[c].telefon;
 edit4.text:=a[c].strasse;
 edit5.text:=a[c].ort;
 edit6.Text:=a[c].plz;
 edit7.Text:=a[c].mail;
end;

procedure TForm6.FormActivate(Sender: TObject);
begin
 Form1.Enabled:=false;
 c:=form1.listbox.ItemIndex;
 read(f,a[c]);
 edit1.Text:=a[c].name;
 edit2.Text:=a[c].vorname;
 edit3.Text:=a[c].telefon;
 edit4.text:=a[c].strasse;
 edit5.text:=a[c].ort;
 edit6.Text:=a[c].plz;
 edit7.Text:=a[c].mail;
end;


c ist die Integer, die den Listbox.Itemindex aus der Hauptform übergibt, damit Ich den Markierten Datensatz aus dem Array lesen kann. Bei den Einzelschritten hat C immer den richtigen Wert, und eine weile auch das Array den richtigen Datensatz drinstehen, aber irgendwann mittendrin ändert es den Inhalt auf den ersten Datensatz... :autsch:
Regards,
Kao

_________________
Wissen ist Macht. Nichts Wissen macht nichts. Aber nichts zu Wissen, hat nichts mit Intelligenz zu tun. ;)


Zuletzt bearbeitet von Kaoro-kun am Mi 23.08.06 17:41, insgesamt 1-mal bearbeitet
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 23.08.06 17:39 
Nun, dazu ist das Setlength ja da. Immer wenn du write aufrufst, vergrößerst du den Array um 1. also ein etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
write(f, MyRecord);
SetLength(AnArray, high(AnArray) + 1);
AnArray[high(AnArray)].a:=MyRecord.a;
AnArray[high(AnArray)].b:=MyRecord.b;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.