Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3
  Alt 9. Mai 2003, 17:58
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 ;
  Mit Zitat antworten Zitat