Autor Beitrag
kuschelfreddy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mi 03.09.08 22:16 
Hey, hoffe, hier kann mir jemand helfen:
Wir sollen für die Schule ein Programm schreiben, dass Daten, die in ein StringGrid eingegeben wurden, als Textdatei abspeichert und mit dem man die Textdatei auch öffnen kann, sodass die Daten dann im StringGrid auftauchen (hoffe, das war verständlich).
Na ja, aus purer Verzweiflung hab ich dann im I-net einfach mal ein bisschen gestöbert und diesen Quelltext gefunden:

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm1.Button7Click(Sender: TObject);
var f: textfile;
    i, k:integer;
begin
  if SaveDialog1.Execute
     then begin
            Assignfile(f, saveDialog1.filename);
            rewrite(f);
            with StringGrid1 do
                 begin
                   writeln(f, StringGrid1.colcount);
                   writeln(f, StringGrid1.rowcount);
                   for i:=0 to stringGrid1.colcount-1 do
                       for k:=0 to StringGrid1.rowcount-1 do
                           writeln(f, StringGrid1.Cells[i, k]);
                 end;
                closefile(f);
          end;
end;

procedure TForm1.Button8Click(Sender: TObject);
var f: textfile;
    i, k, n:integer;
    Wort:string;
begin
  if OpenDialog1.Execute
     then begin
            AssignFile(f, OpenDialog1.filename);
            Reset(f);
            with StringGrid1 do
                 begin
                   Readln(f, n);
                   StringGrid1.colcount:=n;
                   Readln(f, n);
                   StringGrid1.Rowcount:=n;
                   for i:=0 to stringGrid1.colcount-1 do
                       for k:=0 to StringGrid1.rowcount-1 do
                           begin
                             readln(f, Wort);
                             StringGrid1.Cells[i, k]:=Wort;
                           end;
                 end;
            Closefile(f);
          end;
end;


Das funktioniert auch ganz wunderbar und macht genau das, was es soll, nur verstanden, was da eigentlich passiert, habe ich nicht. Hoffe, das kann mir hier jemand erklären.
Danke schonmal.
Nathalie

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von kuschelfreddy am Mi 03.09.08 22:19, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 03.09.08 22:17 
Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern.

Danke Dir!

_________________
We are, we were and will not be.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 03.09.08 22:48 
Ich füg einfach mal ein paar Kommentare hinzu:

ausblenden volle Höhe 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:
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:
procedure TForm1.Button7Click(Sender: TObject);
var f: textfile;
    i, k:integer;
begin
  // Speicher-Dialog aufrufen, liefert True bei OK-Klick
  if SaveDialog1.Execute
     then begin
            // Der Variable f einen Dateinamen zuweisen (Ausgewählter des Speicherdialogs)
            Assignfile(f, saveDialog1.filename);

            // Die Datei zum Schreiben öffnen
            rewrite(f);
            with StringGrid1 do
                 begin
                   // Spalten- und Zeilenanzahl schreiben; die Werte werden mit #13#10 eindeutig terminiert
                   writeln(f, StringGrid1.colcount);
                   writeln(f, StringGrid1.rowcount);

                   // Zuerst Spalten, dann Zeilen abklappern und Inhalt schreiben. Auch mit #13#10 terminiert.

                   // Sieht in etwa so aus
                   // Spalte 1, Zeile 1
                   // Spalte 1, Zeile 2
                   // Spalte 1, Zeile 3
                   // Spalte 2, Zeile 1
                   // Spalte 2, Zeile 2
                   // Spalte 2, Zeile 3

                   for i:=0 to stringGrid1.colcount-1 do
                       for k:=0 to StringGrid1.rowcount-1 do
                           writeln(f, StringGrid1.Cells[i, k]);
                 end;

                // Datei wieder schließen (wichtig!)
                closefile(f);
          end;
end;

procedure TForm1.Button8Click(Sender: TObject);
var f: textfile;
    i, k, n:integer;
    Wort:string;
begin
  if OpenDialog1.Execute
     then begin
            // Der Variablen wieder den Dateinamen zuweisen
            AssignFile(f, OpenDialog1.filename);

            // Die Datei zum Lesen öffnen
            Reset(f);
            with StringGrid1 do
                 begin
                   // Spaltenzahl und Zeilenzahl lesen und setzen
                   // (Der Wert wurde mit #13#10 terminiert, also kann hier bis #13#13 gelesen werden. Das macht Readln.)
                   Readln(f, n);
                   StringGrid1.colcount:=n;
                   Readln(f, n);
                   StringGrid1.Rowcount:=n;

                   // Zuerst Spalten, dann Zeilen abklappern, Werte einlesen und in StringGrid schreiben
                   for i:=0 to stringGrid1.colcount-1 do
                       for k:=0 to StringGrid1.rowcount-1 do
                           begin
                             readln(f, Wort);
                             StringGrid1.Cells[i, k]:=Wort;
                           end;
                 end;

            // Datei auch wieder schließen.
            Closefile(f);
          end;
end;

Ich hoffe, das ist einigermaßen verständlich. Mit AssignFile etc. kenne ich mich nicht so aus (ich verwende Streams), deshalb könnte miene Beschreibung dazu nicht ganz korrekt sein.