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/)
-   -   textdateien in "TStringGrid" (https://www.delphipraxis.net/63765-textdateien-tstringgrid.html)

Lila21 22. Feb 2006 16:38


textdateien in "TStringGrid"
 
hallo!
ich brauche hilfe, ich will aus ner textdatei namen in einen "TStringGrid" schreiben.:?
würde mich sehr über tipps freuen!

danke im vorraus!

DP-Maintenance 22. Feb 2006 16:48

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Und schwupp in die richtige Sparte geschoben ;-)

XeRo 22. Feb 2006 17:19

Re: textdateien in "TStringGrid"
 
ähm. wie genau willst dus denn aufteilen? wie ist die datei aufgebaut? Was genau willst du aus der datei wohin haben?

Lila21 22. Feb 2006 17:36

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von XeRo
ähm. wie genau willst dus denn aufteilen? wie ist die datei aufgebaut? Was genau willst du aus der datei wohin haben?


will den user, lastname, given name,ip-adresse auslesen und in einer "TStringGrid" ausgeben... noch fragen?


Object Class: User
Current context: GK03.FS
User: baez
Last Name: Baez
Given Name: Caroline
Network Address:
TCP/IP Network Address
IP Address: 10.122.121.107

danke im voraus!

XeRo 22. Feb 2006 17:40

Re: textdateien in "TStringGrid"
 
ich würd mal nach "AssignFile" suchen und auch nach der "Copy" Funktion. Das sollte dir vorerst weiterhelfen. :angel:

pacman1986 22. Feb 2006 17:41

Re: textdateien in "TStringGrid"
 
Delphi-Quellcode:
Stringgrid1.LoadFromFile('c:\blub.txt');
????

ich glaub das geht

MaBuSE 22. Feb 2006 17:49

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von pacman1986
Delphi-Quellcode:
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.

Lila21 22. Feb 2006 17:50

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von XeRo
ich würd mal nach "AssignFile" suchen und auch nach der "Copy" Funktion. Das sollte dir vorerst weiterhelfen. :angel:


schön aber will aber den user namen zum beispiel in eine spalte tun?

habt ihr noch vorschläge oder tipps?

MaBuSE 22. Feb 2006 18:17

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von Lila21
Zitat:

Zitat von XeRo
ich würd mal nach "AssignFile" suchen und auch nach der "Copy" Funktion. Das sollte dir vorerst weiterhelfen. :angel:

schön aber will aber den user namen zum beispiel in eine spalte tun?
habt ihr noch vorschläge oder tipps?

Mit Copy kannst Du doch den Namen extrahieren.
Mit Cell[Spalte, Zeile] := Text kannst Du reinschreiben
Beisp:
Delphi-Quellcode:
var s: string
begin
  s := 'DelphiPRAXIS.net';

  StringGrid1.RowCount := 1;
  StringGrid1.ColCount := 3;

  // schreibt 'Delphi' in die 1. Spalte
  StringGrid1.Cells[0,0] := Copy(s, 1, 6);  

  // schreibt 'PRAXIS' in die 2. Spalte
  StringGrid1.Cells[1,0] := Copy(s, 7, 6);

  // schreibt '.net' in die 3. Spalte
  StringGrid1.Cells[2,0] := Copy(s, 13, 100);
end;
Das sollte Dir nun als Hilfe reichen.
Wie man mit Asign umgeht kannst Du ja weiter oben in meinem 1. beisp. sehen.
Viel Spaß

ps: herzlich willkommen in der DP :dp:

Lila21 22. Feb 2006 18:33

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von Lila21
Zitat:

Zitat von XeRo
ich würd mal nach "AssignFile" suchen und auch nach der "Copy" Funktion. Das sollte dir vorerst weiterhelfen. :angel:

schön aber will aber den user namen zum beispiel in eine spalte tun?
habt ihr noch vorschläge oder tipps?

Mit Copy kannst Du doch den Namen extrahieren.
Mit Cell[Spalte, Zeile] := Text kannst Du reinschreiben
Beisp:
Delphi-Quellcode:
var s: string
begin
  s := 'DelphiPRAXIS.net';

  StringGrid1.RowCount := 1;
  StringGrid1.ColCount := 3;

  // schreibt 'Delphi' in die 1. Spalte
  StringGrid1.Cells[0,0] := Copy(s, 1, 6);  

  // schreibt 'PRAXIS' in die 2. Spalte
  StringGrid1.Cells[1,0] := Copy(s, 7, 6);

  // schreibt '.net' in die 3. Spalte
  StringGrid1.Cells[2,0] := Copy(s, 13, 100);
end;
Das sollte Dir nun als Hilfe reichen.
Wie man mit Asign umgeht kannst Du ja weiter oben in meinem 1. beisp. sehen.
Viel Spaß

ps: herzlich willkommen in der DP :dp:

danke werd das beste drausmachen! :coder:

MaBuSE 22. Feb 2006 18:36

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von Lila21
Zitat:

Zitat von MaBuSE
Das sollte Dir nun als Hilfe reichen.
Wie man mit Asign umgeht kannst Du ja weiter oben in meinem 1. beisp. sehen.
Viel Spaß
ps: herzlich willkommen in der DP :dp:

danke werd das beste drausmachen! :coder:

Schau doch mal in der Hilfe von Delphi nach, dort ist es erklärt wie man Copy, Pos usw verwendet. ;-)

Lila21 22. Feb 2006 18:59

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von Lila21
Zitat:

Zitat von MaBuSE
Das sollte Dir nun als Hilfe reichen.
Wie man mit Asign umgeht kannst Du ja weiter oben in meinem 1. beisp. sehen.
Viel Spaß
ps: herzlich willkommen in der DP :dp:

danke werd das beste drausmachen! :coder:

Schau doch mal in der Hilfe von Delphi nach, dort ist es erklärt wie man Copy, Pos usw verwendet. ;-)

danke werd ich dann noch machen! :hi:

Lila21 22. Feb 2006 20:41

Re: textdateien in "TStringGrid"
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi!


ich soll aus dem text(nlist.txt) user ,lastname, givenname und ip adresse in den stringgrid schreiben....könntet ihr mir ein beispiel für das rauskopieren und in die namensspalte einlesen geben??


danke für eure tipps!

MaBuSE 23. Feb 2006 09:27

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von Lila21
ich soll aus dem text(nlist.txt) user ,lastname, givenname und ip adresse in den stringgrid schreiben....könntet ihr mir ein beispiel für das rauskopieren und in die namensspalte einlesen geben??

Eine einfache Lösung wäre folgender Algorithmus:

Code:
Öffne Datei
solange nicht Dateiende tue
start
  Lese s aus Datei
  ist in s 'User:' enthalten dann s := copy(s, 7, 100)
  ist in s '   Last Name:' enthalten dann s := copy(s, 14, 100)
  ist in s '   Given Name:' enthalten dann s := copy(s, 15, 100)
...
  schreibe s in StringGrid
ende
Schliese Datei
Es sollte nicht schweer sein, diesen Algorithmus in Pascal zu übersetzen.

ist in s 'xxx' enthalten macht man mit dem Befehl Pos(s, 'xxx') > 0

Den Rest solltest Du aleine hinbekommen.

chrisw 23. Feb 2006 10:13

Re: textdateien in "TStringGrid"
 
Ich würde das etwa so machen !

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Datei : TStringList;
    i,j   : Integer;
    tempString : String;
    emptyCol  : Boolean;
begin
  Datei := TStringList.Create;
  Datei.LoadFromFile('nlist.txt');
  i := 0;
  while i < Datei.Count -1 do //durch die ganze Datei
    if pos('User: ',Datei[i]) <> 0 then // wenn String "User: " gefunden
    begin
      emptyCol := False; //bisher ncoh keine Leerstelle
      for j := 0 to 5 do //die nächsten 6 Zeilen
      begin
        tempString := Datei[i]; //Zeile kopieren nach tempString
        case j of
            0 : delete(tempString,1,6); //User
            1 : delete(tempString,1,12); //Last name
            2 : delete(tempString,1,13); //Given name
            3 : begin                   //empty Column
                  tempString := '';
                  emptycol := True;
                end;
            4 : delete(tempString,1,2); //network kind
            5 : delete(tempString,1,14);//network address
         end;
          if (tempString <> '') then
          begin
            if not emptycol then StringGrid1.cols[j].Add(tempString) // 1-3 column
            else StringGrid1.cols[j-1].Add(tempString);      //5 + 6 column
            StringGrid1.RowCount := StringGrid1.RowCount +1; //redim Stringgrid
          end;
          inc(i);
      end;
    end else inc(i);
  Datei.Free;
end;

Lila21 23. Feb 2006 14:10

Re: textdateien in "TStringGrid"
 
Zitat:

Zitat von chrisw
Ich würde das etwa so machen !

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Datei : TStringList;
    i,j   : Integer;
    tempString : String;
    emptyCol  : Boolean;
begin
  Datei := TStringList.Create;
  Datei.LoadFromFile('nlist.txt');
  i := 0;
  while i < Datei.Count -1 do //durch die ganze Datei
    if pos('User: ',Datei[i]) <> 0 then // wenn String "User: " gefunden
    begin
      emptyCol := False; //bisher ncoh keine Leerstelle
      for j := 0 to 5 do //die nächsten 6 Zeilen
      begin
        tempString := Datei[i]; //Zeile kopieren nach tempString
        case j of
            0 : delete(tempString,1,6); //User
            1 : delete(tempString,1,12); //Last name
            2 : delete(tempString,1,13); //Given name
            3 : begin                   //empty Column
                  tempString := '';
                  emptycol := True;
                end;
            4 : delete(tempString,1,2); //network kind
            5 : delete(tempString,1,14);//network address
         end;
          if (tempString <> '') then
          begin
            if not emptycol then StringGrid1.cols[j].Add(tempString) // 1-3 column
            else StringGrid1.cols[j-1].Add(tempString);      //5 + 6 column
            StringGrid1.RowCount := StringGrid1.RowCount +1; //redim Stringgrid
          end;
          inc(i);
      end;
    end else inc(i);
  Datei.Free;
end;


danke für euere tipps! :dp:


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

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