Hallo,
hier sind ein paar function's mit denen Du das machen kannst.
Delphi-Quellcode:
function GetToken(aString:String; SepChar: Char;TokenNum: Integer):String;
var
Token : String;
StrLen : Integer;
TNum : Integer;
TEnd : Integer;
begin
StrLen := Length(aString);
TNum := 1;
TEnd := StrLen;
while ((TNum <= TokenNum) and (TEnd <> 0)) do
begin
TEnd := Pos(SepChar,aString);
if TEnd <> 0 then
begin
Token := Copy(aString,1,Tend - 1);
Delete(aString,1,TEnd);
Inc(TNum);
end // if TEnd <> 0 then
else
begin
Token := aString;
end; // else if TEnd <> 0 then
end; // while ((TNum <= TokenNum) and (TEnd <> 0)) do
If TNum >= TokenNum then
begin
Result := Token;
end // If TNum >= TokenNum then
else
begin
Result := '';
end;// else If TNum >= TokenNum then
end;
function NumToken(aString:String; SepChar: Char):Integer;
var
RChar : Char;
StrLen : Integer;
TNum : Integer;
TEnd : Integer;
begin
If SepChar = '#' then
RChar := '*'
else
RChar := '#';
StrLen := Length(aString);
TNum := 0;
TEnd := StrLen;
while TEnd <> 0 do
begin
Inc(TNum);
TEnd := Pos(SepChar,aString);
if TEnd <> 0 then
begin
aString[TEnd] := RChar;
end;
end;
Result := TNum;
end;
procedure DeleteRow(yourStringGrid: TStringGrid; ARow: Integer);
var i: Integer;
begin
with yourStringGrid do
begin
for i := ARow to RowCount-2 do
Rows[i].Assign(Rows[i+1]);
RowCount := RowCount - 1
end;
end;
procedure DeleteEmptyGridRows(Grid : TStringGrid);
var
aCol,
aRow : Integer;
CheckSum : Integer;
begin
CheckSum:=Grid.ColCount;
aRow:=0;
CheckSum:=0;
While aRow<=Grid.RowCount-1 do
begin
CheckSum:=0;
For aCol:=0 to Grid.ColCount-1 do
begin
If Grid.Cells[aCol,aRow]<>'' then
Inc(CheckSum);
end;
If CheckSum=0 then
DeleteRow(Grid,aRow)
else
Inc(aRow);
end;
end;
function SaveGridToFile(Grid : TStringGrid; Filename : String; SepChar : Char; DelEmptyRows : Boolean) : Boolean;
var
Tmp : TStringList;
aCol,
aRow : Integer;
H : String;
aGrid : TStringGrid;
begin
Result:=True;
Tmp:=TStringList.Create;
aGrid:=TStringGrid.Create(Nil);
Try
Try
aGrid.ColCount:=Grid.ColCount;
aGrid.RowCount:=Grid.RowCount;
For aRow:=0 to Grid.RowCount-1 do
aGrid.Rows[aRow].Assign(Grid.Rows[aRow]);
If DelEmptyRows then
DeleteEmptyGridRows(aGrid);
For aRow:=0 to aGrid.RowCount-1 do
begin
H:='';
For aCol:=0 to aGrid.ColCount-1 do
H:=H+Grid.Cells[aCol,aRow]+SepChar;
Tmp.Add(H);
end;
Tmp.SaveToFile(Filename);
Except
Result:=False;
end;
Finally
aGrid.Free;
Tmp.Free;
end;
end;
function LoadGridFromFile(Grid : TStringGrid; Filename : String; SepChar : Char) : Boolean;
var
Tmp : TStringList;
NewColCount : Integer;
aCol,
aRow : Integer;
begin
Result:=True;
Tmp:=TStringList.Create;
Try
Try
Tmp.LoadFromFile(Filename);
NewColCount:=NumToken(Tmp.Strings[0],SepChar)-1;
Grid.ColCount:=NewColCount;
Grid.RowCount:=Tmp.Count;
For aRow:=0 to Tmp.Count-1 do
begin
For aCol:=1 to NewColCount do
Grid.Cells[aCol-1,aRow]:=GetToken(Tmp[aRow],SepChar,aCol);
end;
Except
Result:=False;
end;
Finally
Tmp.Free;
end;
end;
Die Funktionen auf die es ankommt sind:
function SaveGridToFile(Grid : TStringGrid; Filename : String; SepChar : Char; DelEmptyRows : Boolean) : Boolean;
function LoadGridFromFile(Grid : TStringGrid; Filename : String; SepChar : Char) : Boolean;
Die proceduren DeleteEmptyGridRows, DeleteRow, GetToken und NumToken sind nur Hilfsproceduren
Parameter für SaveGridToFile:
Grid : Das TStringGrid, dessn Inhalt gespeichert werden soll
Filename : Pfad und Dateiname
SepChar : Das Separierungzeichen für die einzelnen Strings einer Zeile z.B. ein ;
DelEmptyRows : Wenn True, dann werden alle Zeilen ohne Inhalt nicht gespeichert.
Parameter LoadGridFromFile:
Grid : Das TStringGrid, dessn Inhalt gespeichert werden soll
Filename : Pfad und Dateiname
SepChar : Das Separierungzeichen für die einzelnen Strings einer Zeile z.B. ein ;