Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid einlesen, speichern und auslesen


Snuffy - Fr 17.04.20 18:09
Titel: Stringgrid einlesen, speichern und auslesen
Hallo Leute,
in Folge der Aktuellen Corona Kriese bekomme ich von der Schule Aufgaben für Zuhause.
Nur besteht bei dieser Aufgabe das Problem,dass ich überhaupt keinen Ansatz habe,wie ich es angehen soll.
Das Thema wurde zuvor nur kurz angerissen und nun muss ich ein Programm damit schreiben.

Nun habe ich schon ein Programm geschrieben,welches bereits vorhandene Daten aus einer txt Datei,die ich vorher erstellt habe,in das Stringgrid lädt.

Aber wie kann ich neue Einträge hinzufügen?
Wie kann ich diese Speichern,so dass sie beim nächsten öffnen noch da sind?
Und was sind die dazugehörigen "Befehle"?

Vielen Dank jetzt schon für eure Hilfe.


Das ganze sieht bis jetzt folgendermaßen aus:

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:
var
  Form1: TForm1;
  tf:textfile; //Textdatei
  i:integer=0//zählervariable
  p:integer;  //kompiler
  zeile:string;
  Spalte:string;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//Zuweisung
 opendialog1.Execute;
 assignfile(tf,opendialog1.filename);
 reset(tf);
 repeat
   i := i+1;
   readln(tf,zeile);
   Stringgrid1.Cells[0,i]:=inttostr (i); //Erste Spalte als laufende Nummer

    p := pos('#',zeile);              
   Stringgrid1.Cells[1,i]:=copy(zeile,0,p-1);    //Zeile Kopieren in Stringgrid
   delete(Zeile,1,p);                            //Zeile löschen im Speicher (nicht txt Datei)

    p := pos('#',zeile);
   Stringgrid1.Cells[2,i]:=copy(zeile,0,p-1);
   delete(Zeile,1,p);

    p := pos('#',zeile);
   Stringgrid1.Cells[3,i]:=copy(zeile,0,p-1);
   delete(Zeile,1,p);

    p := pos('#',zeile);
   Stringgrid1.Cells[4,i]:=copy(zeile,0,p-1);
   delete(Zeile,1,p);

   Stringgrid1.Cells[5,i]:=copy(zeile,0,length(Zeile));
   delete(Zeile,1,length(Zeile));

 Stringgrid1.RowCount  := Stringgrid1.RowCount+1;

 until eof(tf);
end;


Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 17.04.2020 um 19:46


Th69 - Fr 17.04.20 19:57

Hallo und :welcome:,

ähnlich wie du bisher die Daten eingelesen hast, kannst du sie auch wieder in einer Datei speichern: ...ein TStringGrid in eine Datei speichern & laden? [https://www.swissdelphicenter.ch/de/showcode.php?id=941]

Und so wie du es bisher auch machst, kannst du mittels Stringgrid1.RowCount := Stringgrid1.RowCount+1; eine neue (leere) Zeile einfügen.

Und bei deinem Dialog solltest du den Rückgabewert überprüfen (ob der Anwender "OK" oder "Abbrechen" ausgewählt hat), s. UsingDialogs (Delphi) [http://docwiki.embarcadero.com/CodeExamples/Rio/en/UsingDialogs_(Delphi)].


hRb - Fr 17.04.20 23:54

Hallo Snoffy,
sieh doch mal hier nach:
https://www.delphi-treff.de/tipps-tricks/komponenten/tstringgrid/inhalt-eines-stringgrids-speichern-und-laden/
oder für weitere StringGridfunktionen, die mir sehr geholfen haben.
https://www.delphi-treff.de/tipps-tricks/komponenten/tstringgrid/
Du musst dann auch nicht Zelle für Zelle lesen, sondern alle Einträge der StringGridzeile ist Text.
Gruß hRb


Snuffy - Sa 18.04.20 12:21

Danke für die schnellen Antworten @Th69 und @hRb! :D

Ich habe mich jetzt mit euren Tips nochmal an ein neues geordnetes Projekt gesetzt und nun Funktioniert alles so wie es soll.
Vor allem die verlinkte Seite Delphi Treff sollte ich mir merken. Doof das ich nicht schon früher drauf gestoßen bin.

Vielen Dank und Liebe Grüße,

Snuffy :lol: