Ich komme mit der geposteten Seite leider nicht weiter :S kann mir nicht einer genauer sagen wie ich es machen muss, oder gar sogar einne Code posten? Wieso funktioniert das denn überhaupt mit WriteComponent nicht :S
Bei dem von Marabu geposteten Code kennt er 'ifthen' nicht!
Gruß Bernd
Edit, ich habe jetzt das hier genommen und "ifthen" einfach durch '0' ersetzt:
Zitat von
marabu:
Lukas hat Recht, Onkel Google hat dir nicht alles gegeben. In seinem Code hat er allerdings ein paar Fehler eingebaut.
Beim Speichern eines StringGrid musst man überlegen, ob die Daten spalten- oder zeilenorientiert gespeichert werden sollen. Das Speichern mehrerer StringGrids in derselben Datei ist technisch kein Problem, aber ob es auch sinnvoll ist? Falls es Überschriften (FixedCols, FixedRows) gibt, sollen die immer bei jedem Speichervorgang mitgespeichert werden?
Eine Speicherroutine, die diese Fragestellungen berücksichtigt, könnte ansatzweise so aussehen:
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;
Testen kannst du so:
Delphi-Quellcode:
var
s: TStream;
fn: TFileName;
begin
fn := ChangeFileExt(ParamStr(0), '.txt');
s := TFileStream.Create(fn, fmCreate);
// Zeilenweise, FixedRows mitspeichern
SaveGrid(StringGrid, s);
// Zeilenweise, FixedRows nicht mitspeichern
SaveGrid(StringGrid, s, [soExcludeFixed]);
// Spaltenweise, FixedRows mitspeichern
SaveGrid(StringGrid, s, [soSaveCols]);
// Spalteweise, FixedRows nicht mitspeichern
SaveGrid(StringGrid, s, [soSaveCols, soExcludeFixed]);
s.Free;
end;
Mit diesem Test-Code würde dasselbe StringGrid auf vier verschiedene Arten hintereinander in dieselbe Datei geschrieben.
Grüße vom marabu
Frage ist, wie ich das jetzt wieder einlesen kann?! und vorallem habe ich die Datei mal geöffnet und musste feststellen, dass das mit Trennzeichen abgespeichert wird. Das könnte jedoch Probleme mit meinen Inhalt geben, da dort einige Felder sehr langen Text mit vielen (auch Sonderzeichen) habe...