AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei in Stringgrid einlesen

Ein Thema von n00b_on_knees · begonnen am 8. Dez 2003 · letzter Beitrag vom 8. Dez 2003
Antwort Antwort
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#1

Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 14:05
Hallo!

Ich soll eine .csv Datei in ein Stringgrid einlesen. Es soll so von statten gehen, das
hier bei diesem Bsp. 7 Spalten und 28 Reihen gegeben sein sollen. Einzelne Wörter sind mit einem Zeichen, als Bsp. hier mit einem '.' (ohne ') getrennt. Diese einzelnen Wörter sollen ins Stringgrid geschrieben werden. Die Anzahl der Spalten und Zeilen soll sich auf die Datei anpassen..
(also wenn es mehr Spalten als 7 gibt, soll eine 8. erscheinen, wenn mehr Reihen werden, nach unten hin verlängern.)

Ich bin leider noch nicht besonders weit...

Delphi-Quellcode:
procedure TForm1.btStartClick(Sender: TObject);
var
  f: textfile;
  i, j: integer;
  fn, zeile: string;
begin
  OpenDialog1.Execute;
  fn:= OpenDialog1.FileName;
  AssignFile(f,fn);
  reset(f);
  //...
end;
end.
ist leider alles was ich bis jetzt geschafft habe, also das öffnen der Datei, habe es auch schon geschafft die ganze Datei in einem einzelnen StringGridFeld auszugeben, nur das bringt sich nicht viel, da das ja nicht gewünscht ist.

Ich hoffe ihr könnt mir helfen, der Angabe gerecht zu werden.
Danke im Vorraus.
MFG
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 15:04
Moin n00b_on_knees,

dazu fallen mir noch folgende Stichworte ein, unter denen Du erst mal in der Hilfe, oder auch hier schauen solltest:

pos
copy
Delete
TStringGrid.RowCount bzw. ColCount
ReadLn
TStringList.CommaText

ausserdem haben wir in der CodeLib noch einen Ersatz für pos, bei dem man den Startwert vorgeben kann.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 15:06
Man kann dazu aber auch schon die fertige Funktion ExplodeExplode aus der Code-Lib benutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#4

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 16:51
danke für eure antworten

@luckie
puh das ganze ist denke ich etwas zu lang, und ich kenne mich da leider nicht so besonders gut aus, dass ich das hier einbauen könnte.

@christian seehase
ja diese Begriffe kenne ich ja, und ich habe wohl auch schon einen Lösungsweg im Kopf, doch leider kann ich wohl das ganze nicht so wirklich umsetzen.

Kann ich auf die Datei wie in einem Feld oder String an sich zugreifen, ala "i-tes Element der Datei" = '.'? wie erkennt man ob eine neue Zeile angefangen hat, bzw. wie kommt man in die nächste Zeile?
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 17:31
Explode (Ein dynamisches Array aus einem String erzeugen)

Delphi-Quellcode:
Function Explode(Const Separator, S: String; Limit: Integer = 0): TStringDynArray;
  ... {hier den Code von Explode einfügen}

Procedure TForm1.btStartClick(Sender: TObject);
  Var f: TextFile;
    Zeile, I: Integer;
    ZeileS: String;
    ZeileA: TStringDynArray;

  Begin
    OpenDialog1.Execute;
    Zeile := 0;
    StringGrid1.RowCount := StringGrid1.FixedRows + 1;
    StringGrid1.ColCount := StringGrid1.FixedCols + 1;
    StringGrid1.Cells[StringGrid1.FixedCols, StringGrid1.FixedRows] := '';
    AssignFile(f, OpenDialog1.FileName);
    Reset(f);
    While not EoF(F1) do Begin
      ReadLn(f, ZeileS);
      ZeileA := Explode('.', ZeileS);
      Inc(Zeile);
      StringGrid1.RowCount := StringGrid1.FixedRows + Zeile;
      If StringGrid1.ColCount < StringGrid1.FixedCols + Length(ZeileA) Then
        StringGrid1.ColCount := StringGrid1.FixedCols + Length(ZeileA);
      For I := 0 to Length(ZeileA) - 1 do
        StringGrid1.Cells[StringGrid1.FixedCols + I, StringGrid1.FixedRows + Zeile - 1] := ZeileA[I];
    End;
    CloseFile(f);
  End;
(nicht getestet)

Wenn es funktioniert, wird die Datei ins StringGrid1 geladen, dabei wird sogar alles so verschieben, dass die Daten nicht in den fixierten Spalten/Zeilen stehen. (in die fxierten Teile können dann noch Überschriften oder so eingetragen werden)

Wenn die fixierten Zeilen/Spalten nicht benötigt werden, braucht StringGrid1.FixedCols und StringGrid1.FixedRows einfach nur auf 0 gesetzt werden. StringGrid1.FixedCols und StringGrid1.FixedRows können dann einfach rausgekürtzt werden (einfach löschen).


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#6

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 17:49
dankeschön.
nur in der funktion explode gibt es ein paar inkompatible typen, eigentlich immer bei result, und auch den rückgabetyp kennt er nicht, habe den mal durch eben TStringGrid ersetzt, doch dann steht 2 mal diese klasse besitzt kein standartobjekt.
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Datei in Stringgrid einlesen

  Alt 8. Dez 2003, 18:13
Also noch ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Delphi-Quellcode:
Uses Types;

Function Explode(Const Separator, S: String; Limit: Integer = 0): TStringDynArray;
  Var SepLen: Integer;
    F, P: PChar;
    ALen, Index: Integer;

  Begin
    SetLength(Result, 0);
    If (S = '') or (Limit < 0) Then Exit;
    If Separator = 'Then Begin
      SetLength(Result, 1);
      Result[0] := S;
      Exit;
    End;
    SepLen := Length(Separator);
    ALen := Limit;
    SetLength(Result, ALen);
    Index := 0;
    P := PChar(S);
    While P^ <> #0 do Begin
      F := P;
      P := AnsiStrPos(P, PChar(Separator));
      If (P = nil) or ((Limit > 0) and (Index = Limit - 1)) Then P := StrEnd(F);
      If Index >= ALen Then Begin
        Inc(ALen, 5);
        SetLength(Result, ALen);
      End;
      SetString(Result[Index], F, P - F);
      Inc(Index);
      If P^ <> #0 Then Inc(P, SepLen);
    End;
    If Index < ALen Then SetLength(Result, Index);
  End;

Procedure TForm1.btStartClick(Sender: TObject);
  Var f: TextFile;
    Zeile, I: Integer;
    ZeileS: String;
    ZeileA: TStringDynArray;

  Begin
    OpenDialog1.Execute;
    Zeile := 0;
    StringGrid1.RowCount := StringGrid1.FixedRows + 1;
    StringGrid1.ColCount := StringGrid1.FixedCols + 1;
    StringGrid1.Cells[StringGrid1.FixedCols, StringGrid1.FixedRows] := '';
    AssignFile(f, OpenDialog1.FileName);
    Reset(f);
    While not EoF(f) do Begin
      ReadLn(f, ZeileS);
      ZeileA := Explode('.', ZeileS);
      Inc(Zeile);
      StringGrid1.RowCount := StringGrid1.FixedRows + Zeile;
      If StringGrid1.ColCount < StringGrid1.FixedCols + Length(ZeileA) Then
        StringGrid1.ColCount := StringGrid1.FixedCols + Length(ZeileA);
      For I := 0 to Length(ZeileA) - 1 do
        StringGrid1.Cells[StringGrid1.FixedCols + I, StringGrid1.FixedRows + Zeile - 1] := ZeileA[I];
    End;
    CloseFile(f);
  End;
TStringDynArray ist in der Unit Types deklariert.
Fals die Unit Types nicht vorhanden ist, brauchst du nur diese ZeileUses Types; durch dieseType TStringDynArray = Array of String; ersetzen.


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 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