Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid Inhalt Speichern? (https://www.delphipraxis.net/103873-stringgrid-inhalt-speichern.html)

Borschti 23. Nov 2007 09:30


StringGrid Inhalt Speichern?
 
Hallo,

ich habe ein Problem mit meinem SaveDialog und zwar bin ich soweit das ich zwar aus meinem StringGrid in eine Textdatei etwas schreiben kann aber durch meine for-Schleife wird immer nur die Letzte Zeile meines StringGrids in die Datei gespeichert, was auch eigentlich Logisch ist. Nun will ich aber das jede Zeile meines StringGrids gleichzeitig in meine Datei gespeichert wird.

Hier mal der Code-Ausschnitt:

Delphi-Quellcode:
procedure TForm1.Speichern1Click(Sender: TObject);
 var i: Integer;
begin
  if SaveDialog1.Execute then
     try
      for i := 1 to 10 do begin
        StringGrid1.Rows[i].SaveToFile(SaveDialog1.Filename);
      end;
     except
       ShowMessage ('Fehler beim Speichern der Datei!');
     end;
Kennt da vielleicht jemand eine Lösung?

Auserdem werden die einzelnen Zeileninhalte untereinander in der Textdatei gespeichert, ich will aber das sie wie im Folgenden Beispiel gespeichert werden damit ich gespeicherte Datei auch wieder in mein StringGrid laden kann.

Hier mal das angekündigte Beispiel:

1;52323;Müller;Hans;Kühle Bäume 12;13186;Jesberg;
2;52266;Lang;Susanne;Am Rödel 21;52131;Hundshausen;
...

Bin für jede hilfreiche Antwort dankbar

mfg Alex

Sharky 23. Nov 2007 09:40

Re: StringGrid Inhalt Speichern?
 
Hai Borschti,

schaue Dir doch mal diesen Thread an.

Borschti 23. Nov 2007 10:43

Re: StringGrid Inhalt Speichern?
 
Daanke für den Link werde mirs mal genauer anschaun und mich gegebenenfalls nochmal melden ;)

Borschti 23. Nov 2007 11:49

Re: StringGrid Inhalt Speichern?
 
Also das klappt jetzt fast alles so wie es soll, das ist schonmal gut ;)

Allerdings habe ich noch 2 Probleme, und zwar wird ja als Trennzeichen in der abgespeicherten Textdatei, durch .CommaText, ein Komma verwendet, ich brauch aber ein Semikolon als Trennzeichen damit ich die Datei dann auch wieder in mein StringGrid einlesen kann gibts da ein Befehl in der Art wie .CommaText?

Meine zweite Frage ist wie ich die erste Zeile bzw. die FixedRows vom Speichern ausschliesen kann?

mfg Alex

Sharky 23. Nov 2007 12:03

Re: StringGrid Inhalt Speichern?
 
Zitat:

Zitat von Borschti
... ich brauch aber ein Semikolon als Trennzeichen damit ich die Datei dann auch wieder in mein StringGrid einlesen kann gibts da ein Befehl in der Art wie .CommaText?

Das Komma ist leider fest vorgegeben. Aber das sollte doch eigentlich egal sein welches Trennzeichen verwendet wird!

Zitat:

Meine zweite Frage ist wie ich die erste Zeile bzw. die FixedRows vom Speichern ausschliesen kann?
Das hat marabu doch berücksichtigt und sogar als Beispiel angegeben.

Borschti 23. Nov 2007 12:34

Re: StringGrid Inhalt Speichern?
 
Naja schade eigentlich muss ich wohl ein Paar Sachen umstellen :(

Ich habe die Prozedur von Marabu mal getestet, allerdings werden mir bei

Delphi-Quellcode:
type
  TSaveOption = (soSaveCols, soExcludeFixed);
  TSaveOptions = set of TSaveOption;
einige Fehler angezeigt, von wegen "X erwartet aber Y gefunden", ich habe mal das eingesetzt wonach er gefragt hat aber bin nicht wirklich weitergekommen...weiß jemand wie man das beheben kann?

Borschti 26. Nov 2007 13:04

Re: StringGrid Inhalt Speichern?
 
Da der Thread ja nun leider etwas nach unten gerutscht ist werd ich ihn wohl Pushen müssen :|

Also nochmal meine Frage, weiß jemand wie sich das Problem beheben lässt?

Delphi Version ist Delphi 7 Professional.

mfg
Alex

DeddyH 26. Nov 2007 13:14

Re: StringGrid Inhalt Speichern?
 
Zeig doch mal den fehlerhaften Code und am Besten den Teil davor und den Teil dahinter gleich mit.

Borschti 26. Nov 2007 13:31

Re: StringGrid Inhalt Speichern?
 
Hier ist nochmal der Code Abschnitt


Delphi-Quellcode:
type
  Bearbetien1: TMenuItem;
  Speichern1: TMenuItem;
  SaveDialog1: TSaveDialog;
  N3: TMenuItem;
  TSaveOption = (soSaveCols, soExcludeFixed); // Hier der Fehler
  TSaveOptions = set of TSaveOption;
  procedure ffnen1Click(Sender: TObject);
  procedure Druckereinstellungen1Click(Sender: TObject);
  procedure Drucken1Click(Sender: TObject);
Fehlermeldung lautet: ':' erwartet, aber '=' gefunden. Hab schon ausprobiert es mit den "Anweisungen" der Fehlermeldungen zu lösen aber irgendwann wirds einfach nurnoch schräg. Auserdem Merkwürdig ist das mir die Meldungen die sich auf den Teil beziehen mir in Fenstern ausgegeben werden, die anderen aber nicht :/

Und hier nochmal der gesamte Ausschnitt mit dem es zusammenhängt.

Delphi-Quellcode:
type
  TSaveOption = (soSaveCols, soExcludeFixed);
  TSaveOptions = set of TSaveOption;

procedure SaveGrid(sg: TStringGrid; s: TStream; so: TSaveOptions = []);
var
  iLow, iHigh, i: Integer;
  ss: TStringStream;
  bSaveCols, bExcludeFixed: Boolean;
begin
  ss := TStringStream.Create('');
  with sg do
  begin
    bSaveCols := soSaveCols in so;
    bExcludeFixed := soExcludeFixed in so;
    if bSaveCols then
    begin
      iLow := IfThen(bExcludeFixed, FixedCols);
      iHigh := Pred(ColCount);
    end else
    begin
      iLow := IfThen(bExcludeFixed, FixedRows);
      iHigh := Pred(RowCount);
    end;
    for i := iLow to iHigh do
    begin
      ss.Size := 0;
      if bSaveCols
        then ss.WriteString(Cols[i].CommaText + sLineBreak)
        else ss.WriteString(Rows[i].CommaText + sLineBreak);
      ss.Position := 0;
      s.CopyFrom(ss, ss.Size);
    end;
  end;
  ss.Free;
end;

mfg
Alex

DeddyH 26. Nov 2007 13:34

Re: StringGrid Inhalt Speichern?
 
Irgendwie fehlt mir da etwas.
Delphi-Quellcode:
type
  TSaveOption = (soSaveCols, soExcludeFixed);
  TSaveOptions = set of TSaveOption;

  TFormMain = class(TForm) //wo ist das geblieben?
    Bearbetien1: TMenuItem;
    Speichern1: TMenuItem;
    SaveDialog1: TSaveDialog;
    N3: TMenuItem;
    procedure ffnen1Click(Sender: TObject);
    procedure Druckereinstellungen1Click(Sender: TObject);
    procedure Drucken1Click(Sender: TObject);


Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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