Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 

Re: textdateien in "TStringGrid"

  Alt 22. Feb 2006, 17:49
Zitat von pacman1986:
Stringgrid1.LoadFromFile('c:\blub.txt');
Nein, das geht nicht !!!

Es gibt viele Möglichkeiten eine Textdatei in ein StringGrid zu lesen.

Hier 2 Möglichkeiten:
(Einfach 2 TButton auf ein leeres Form und ein TStringGrid drauf platzieren)

Anmerkung:
  • Es wird ein StringGrid mit 2 Spalten gefüllt.
    1. Spalte ist die Zeilennummer
    2. Spalte ist die ganze Textzeile
    Wenn Du nur Teile der Textzeile in eine Zelle schreiben möchtest kannst du ja den String s mit Copy, pos, ... auseinandernehmen. und den Teilstring in die Zelle schreiben.
Viel Spaß
MaBuSE

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const Dateiname = 'C:\boot.ini'; // gibt's ab WinNT

procedure TForm1.FormCreate(Sender: TObject);
begin
  // StringGrid1 soll 2 Spalten haben (eine kleine und eine große Spalte)
  StringGrid1.ColCount := 2;
  StringGrid1.ColWidths[1] := StringGrid1.Width - StringGrid1.ColWidths[0] - 30;
  StringGrid1.RowCount := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile;
  s: string;
begin
  // hier wird eine Textdatei geöffnet und zeilenweise ausgelesen

  // StringGrid auf eine Zeile reduzieren
  StringGrid1.RowCount := 1;

  // Datei öffnen
  AssignFile(f, Dateiname);
  Reset(f);

  // solange das Dateiende noch nicht erreicht ist
  while not eof(f) do
  begin
    // Zeile aus Textdatei in string lesen
    Readln(f, s);

    // in die linke Spalte wird die Zeilennummer geschrieben
    StringGrid1.Cells[0,StringGrid1.RowCount-1] := IntToStr(StringGrid1.RowCount);

    // in die rechte Spalte die Textzeile
    StringGrid1.Cells[1,StringGrid1.RowCount-1] := s;

    // Nach jedem Schreiben wird eine Zeile angehängt
    StringGrid1.RowCount := StringGrid1.RowCount + 1;
  end;

  // Letzte (zuviel) angehängte Zeile wieder entfernen
  StringGrid1.RowCount := StringGrid1.RowCount - 1;

  // Datei schliessen
  CloseFile(f);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  sl: TStringList;
  i: integer;
begin
  // StringListe im Speicher erzeugen und initialisieren
  sl := TStringList.Create;
  try
    // Text wird in eine StringListe geladen
    sl.LoadFromFile(Dateiname);

    // StringGrid wird auf die "richtige" Zeilenanzahl eingestellt
    StringGrid1.RowCount := sl.Count;

    // Text wird direkt in 2. Spalte übertragen
    StringGrid1.Cols[1].Assign(sl);

    // die "Zeilennummern" werden in einer For Schleife in die 1. Spalte geschrieben
    for i := 0 to sl.Count -1 do
    begin
      StringGrid1.Cells[0,i] := IntToStr(i+1);
    end;
   finally
     // StringListe wieder aus dem Speicher entfernen
     sl.Free;
   end;
end;


end.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat