| 
   
    | ...read a table-textfile in a StringGrid? |   
    | Autor: 
      Loïs Bégué |  | [ Print tip 
] |  |  |  
 
 
{Ausgehend von einer Tabelle, deren Spalten durch einem festgelegten Zeichen getrennt sind
 wird ein StringGrid wie folgt automatisch aufgebaut.
 
 If you have to import a simple textfile table (with a well defined field separator)
 in your StringGrid, you can manage it like this.
 }
 
 
 procedure ReadTabFile(FN: TFileName; FieldSeparator: Char; SG: TStringGrid);
 var
 i: Integer;
 S: string;
 T: string;
 Colonne, ligne: Integer;
 Les_Strings: TStringList;
 CountCols: Integer;
 CountLines: Integer;
 TabPos: Integer;
 StartPos: Integer;
 InitialCol: Integer;
 begin
 Les_Strings := TStringList.Create;
 try
 // Load the file, Datei laden
 Les_Strings.LoadFromFile(FN);
 
 // Get the number of rows, Anzahl der Zeilen ermitteln
 CountLines := Les_Strings.Count + SG.FixedRows;
 
 // Get the number of columns, Anzahl der Spalten ermitteln
 T := Les_Strings[0];
 for i := 0 to Length(T) - 1 do Inc(CountCols, Ord(IsDelimiter(FieldSeparator, T, i)));
 Inc(CountCols, 1 + SG.FixedCols);
 
 // Adjust Grid dimensions, Anpassung der Grid-Größe
 if CountLines > SG.RowCount then SG.RowCount := CountLines;
 if CountCols > SG.ColCount then SG.ColCount := CountCols;
 
 // Initialisierung
 InitialCol := SG.FixedCols - 1;
 Ligne := SG.FixedRows - 1;
 
 // Iterate through all rows of the table
 // Schleife durch allen Zeilen der Tabelle
 for i := 0 to Les_Strings.Count - 1 do
 begin
 Colonne := InitialCol;
 Inc(Ligne);
 StartPos := 1;
 S := Les_Strings[i];
 TabPos := Pos(FieldSeparator, S);
 repeat
 Inc(Colonne);
 SG.Cells[Colonne, Ligne] := Copy(S, StartPos, TabPos - 1);
 S := Copy(S, TabPos + 1, 999);
 TabPos := Pos(FieldSeparator, S);
 until TabPos = 0;
 end;
 finally
 Les_Strings.Free;
 end;
 end;
 
 // Example, Beispiel:
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 Screen.Cursor := crHourGlass;
 // Open tab-delimited files
 ReadTabFile('C:\TEST.TXT', #9, StringGrid1);
 Screen.Cursor := crDefault;
 end;
 
 
 
   |