Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Textdatei in ein Stringgrid einlesen (https://www.delphipraxis.net/37972-textdatei-ein-stringgrid-einlesen.html)

Budda 13. Jan 2005 08:04


Textdatei in ein Stringgrid einlesen
 
Hallo,

habe nun schon viel gesucht und noch keinen Beitrag finden können der mein Problem so behandelt.
Und zwar möchte ich in ein Stringgrid eine Textdatei mit Daten einlesen die mit (;) getrennt sind.
In der ersten Zeile stehen die Spalten überschriften. Anschliessend möchte ich dann in einer bestimmten Spalten nach bestimmten Strings suchen und diese durch andere Strings ersetzen.

Nur bleib ich schon bei dem Problem hängen die Textdatei in ein Stringgrid einzulesen.

Kann mir da vielleicht jemand weiterhelfen?


Gruß
Budda

Stevie 13. Jan 2005 08:38

Re: Textdatei in ein Stringgrid einlesen
 
Hi,

du kannst das ganze auch mit einem TClientDataSet und einem TDBGrid machen.
Über das ClientDataSet kann man imho bestimmte Dateiformate einlesen.
Ansonsten musst du dir selber einen Parser bauen, der die Textdatei in dein
StringGrid schreibt.

MfG
Stevie

Sharky 13. Jan 2005 08:49

Re: Textdatei in ein Stringgrid einlesen
 
Hai Budda,

ich würde das mit zwei TStringList lösen. In die erste liest Du die Textdatei ein. Jetzt übergibst Du der zweiten jede einzelne Zweile an Delphi-Referenz durchsuchenDelimitedText und wertest das dann aus.

Budda 14. Jan 2005 08:45

Re: Textdatei in ein Stringgrid einlesen
 
Hallo,

habe das einlesen nun mit folgender Procedure gelöst:
Code:
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
    Les_Strings.LoadFromFile(FN);

    CountLines := Les_Strings.Count + SG.FixedRows;

    T := Les_Strings[0];
    for i := 0 to Length(T) - 1 do Inc(CountCols, Ord(IsDelimiter(FieldSeparator, T, i)));
    Inc(CountCols, 1 + SG.FixedCols);

    if CountLines > SG.RowCount then SG.RowCount := CountLines;
    if CountCols > SG.ColCount then SG.ColCount := CountCols;

    InitialCol := SG.FixedCols - 1;
    Ligne := SG.FixedRows - 1;

    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;
Die Textdatei hat das Semikolon als Trennzeichen, nun kommt es aber leider auch vor das in einem Feld Semikolons im Text sind, hier soll er dann natürlich nicht trennen. Kann man das irgendwie abfangen?


Gruß
Budda

Sharky 14. Jan 2005 08:48

Re: Textdatei in ein Stringgrid einlesen
 
Zitat:

Zitat von Budda
.... Kann man das irgendwie abfangen?...

Hai Budda,
das kann eigentlich nur gehen wenn der Text dann in ein Quotingzeigen (z.B.: ") eingeschlossen ist.

Budda 14. Jan 2005 12:14

Re: Textdatei in ein Stringgrid einlesen
 
Mir ist grade noch ein Problem aufgefallen.
Die letzte Spalte scheint er ganz weg zu lassen, hier fehlt auch die Überschrift in der ersten zeile.
Müssten 8 Zeilen sein sind aber nur 7.

Hab ich da was falsch gemacht?

xy210 22. Jan 2005 22:39

Re: Textdatei in ein Stringgrid einlesen
 
Zitat:

Müssten 8 Zeilen sein sind aber nur 7.

Hab ich da was falsch gemacht?
Hier:
Zitat:

TabPos := Pos(FieldSeparator, S);
until TabPos = 0;
wird TabPos nach dem 7. Feld auf 0 gesetzt und somit die Schleife beendet. Es steht aber in dem String noch was drin. Jetzt muß bloß der rest aus dem String wenn TabPos=0 ist in das nächste Feld (8. Feld) eingetragen werden.
Dann dürfte es klappen. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz