Einzelnen Beitrag anzeigen

DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#11

Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)

  Alt 23. Mär 2004, 13:39
@ Robert_G: Schönes Foto!

Hab aber bei mir noch ein paar Probleme Deinen Code einzubauen.
Er meckert bei PosEx und Grind.

Hier ist mein Ansatz, denke aber, dass diese komplett falsch ist:

Delphi-Quellcode:
unit MatGrind;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    StringGrid2: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
Var
  X, Y, ActPos, PrevPos : Integer;
  sl : TStrings;
Begin
  If Not OpenDialog1.Execute Then Exit;
  sl := TStringList.Create;
  Try
    // Öffne Datei in StringList
    sl.LoadFromFile(OpenDialog1.FileName);
    // laufe durch die sl
    For Y := 0 To pred(sl.Count) Do
    Begin
      // Spalte 0
      X := 0;

      PrevPos := 1;
      // suche das erste ","
      ActPos := PosEx(',', Sl[Y], PrevPos);
      // verlasse die Schleife wenn kein "," mehr gefunden wurde
      While ActPos > 0 Do
      Begin
        // schreibe in die Zelle den Text zwischen dem vorherigen "," und dem gefundenen ","
        Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, (ActPos - PrevPos));
        // Postion des letzten Kommas
        PrevPos := succ(ActPos);
        // suche das nächste ","
        ActPos := PosEx(',', Sl[Y], PrevPos);
        inc(X);
      End;
      // zum Schluss noch den Text ab dem zuletzt gefundenen Komma in die Zelle
      Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, Length(sl[Y]));

    End;
  Finally
    // Freigeben der sl
    FreeAndNil(SL);
  End;
End;

procedure TForm1.Button2Click(Sender: TObject);
Var
  X, Y : Integer;
  sl : TStrings;
  TempStr : String;
Begin
  If Not SaveDialog1.Execute Then Exit;
  sl := TStringList.Create;
  Try
    With Grid Do
      For Y := 0 To pred(Grid.RowCount) Do
      Begin
        // Leeren des TempStr vor jeder Zeile
        TempStr := '';
        For X := 0 To pred(Grid.ColCount) Do
          TempStr := TempStr + Trim(Cells[X, Y]) + ',';

        // Hinzufügen von TempStr zur sl
        // in der letzten Zeile muss das letzte Komma abgeschnitten werden
        If Y = pred(Grid.RowCount) Then
          sl.Add(Copy(TempStr, 1, Length(TempStr) - 1))
        Else
          sl.Add(TempStr);
      End;

    // Speichern der StringList
    sl.SaveToFile(SaveDialog1.FileName);
  Finally
    // Freigeben der sl
    FreeAndNil(SL);
  End;
End;

end.
CU

DRPEnc
  Mit Zitat antworten Zitat