Einzelnen Beitrag anzeigen

r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#1

In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 14:52
Hallo Zusammen,

Ich habe ein Problem:

Ich habe eine CSV Datei mit einen Inhalt
BildName.jpg dann Datum und Betrag.

mit ; getrennt

jetzt will ich aber in diese datei bei einen klick auffem button auf in die CSV datei reinschreiben das das der Datensatz quasi erledigt ist

mein bisheriger Code:


Der CODE Liest nur von der CSV datei ein und füllt ein String Grid!

Delphi-Quellcode:
unit Inhaltcsvfrm;

interface

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

type
  Tfrminhaltcsv = class(TForm)
    Panel1: TPanel;
    pnlgridkorreckte: TPanel;
    pnlRadiobtn: TPanel;
    RadioGroup: TRadioGroup;
    pnlgridfalsch: TPanel;
    GridFalscheSchecks: TStringGrid;
    GridKorrekteGrid: TStringGrid;
    pnlButtonOKsetzen: TPanel;
    btnOK: TButton;
    procedure FormCreate(Sender: TObject);
    procedure RadioGroupClick(Sender: TObject);
  private
    { Private-Deklarationen }
    lst : TList;
    lstganz: TList;
  public
    { Public-Deklarationen }
    procedure lesencsv(Dateiname, Pfad: String);
    procedure lesencsvganz(Dateiname, Pfad: String);
  end;

var
  frminhaltcsv: Tfrminhaltcsv;

implementation

{$R *.dfm}

type
  Inhaltcsvdateikaputt = class
  private
  public
    Bildname: String;
    Betrag: currency;
    Erleidigt: String;
    Zeile: Integer;
    Datum : String;
end;

type
  Inhaltcsvdateiganz = class
  private
  public
    Bildname: String;
    Zeile: integer;
end;

{ Tfrminhaltcsv }

procedure Tfrminhaltcsv.lesencsv(Dateiname, Pfad: String);
var
  f: Textfile;
  sZeile,Bildnameneu,Bildnamehilfe : String;
  iZeile,i : integer;
  bild : Inhaltcsvdateikaputt;
  function GetNext : String;
  var
    iPos : integer;
  begin
    iPos := Pos(';', sZeile);
    if (iPos > 0) then
    begin
      Result := copy(sZeile, 1, iPos-1);
      delete(sZeile, 1,iPos);
    end
    else
    begin
      Result := sZeile;
      sZeile := '';
    end;
  end;
begin
   AssignFile(f, IncludeTrailingBackslash(Pfad) + Dateiname);
   Reset(f);
  Bildnamehilfe:= '';
   try
     iZeile := 0;
    Readln(f, sZeile);
    // falls gefüllt, müssen evtl Objecte zerstört werden
// lst.Clear;

    // ### hier könnte man die Spalten aus der csv-Datei bestimmen
      while (not Eof(f)) do
      begin
         Readln(f, sZeile);
      inc(iZeile);
      Bildnameneu:= Getnext;

      if Copy(Bildnameneu,0,37) <> Copy(Bildnamehilfe,0,37) then
      begin
        bild := Inhaltcsvdateikaputt.Create();
        bild.Bildname := Bildnameneu;
        Bildnamehilfe:= Bildnameneu;
        bild.Datum := GetNext;
        bild.Betrag := StrToFloatDef(GetNext(), 0);
        bild.Zeile := iZeile;
        lst.Add(bild);
      end;
      end;
   finally
       CloseFile(f);
   end;
  GridFalscheSchecks.RowCount:= lst.Count+1;
  GridFalscheschecks.ColWidths[0]:= Canvas.TextWidth(bild.Bildname) +10;
  for i:= 0 to lst.Count - 1 do
  begin
    GridFalscheSchecks.cells[0,i+1]:= Inhaltcsvdateikaputt(lst[i]).Bildname;
    GridFalscheSchecks.Cells[1,i+1]:= FloatToStr(Inhaltcsvdateikaputt(lst[i]).Betrag);
    GridFalscheSchecks.Cells[2,i+1]:= Inhaltcsvdateikaputt(lst[i]).Erleidigt;
  end;
  lesencsvganz(Dateiname,Pfad);
end;



procedure Tfrminhaltcsv.FormCreate(Sender: TObject);
begin
  lst:= TList.Create;
  lstganz:= TList.Create;
end;

procedure Tfrminhaltcsv.lesencsvganz(Dateiname, Pfad: String);
var
  g: Textfile;
  sZeile,Bildnameneu,Bildnamehilfe : String;
  iZeile,i : integer;
  bildganz : Inhaltcsvdateiganz;
  Dateinameganz: String;
  function GetNext : String;
  var
    iPos : integer;
  begin
    iPos := Pos(';', sZeile);
    if (iPos > 0) then
    begin
      Result := copy(sZeile, 1, iPos-1);
      delete(sZeile, 1,iPos);
    end
    else
    begin
      Result := sZeile;
      sZeile := '';
    end;
  end;
begin
  Dateinameganz:= copy(Dateiname,0,3) + '6' + copy(Dateiname,5,20);
   AssignFile(g, IncludeTrailingBackslash(Pfad) + Dateinameganz);
    Reset(g);
  Bildnamehilfe:= '';
   try
     iZeile := 0;
    Readln(g, sZeile); // ### hier könnte man die Spalten aus der csv-Datei bestimmen
 // if lstganz.Count <> 0 then
   // lstganz.Clear; // falls gefüllt, müssen evtl Objecte zerstört werden


      while (not Eof(g)) do
      begin
         Readln(g, sZeile);
      inc(iZeile);
      Bildnameneu:= Getnext;

      if Copy(Bildnameneu,0,37) <> Copy(Bildnamehilfe,0,37) then
      begin
        bildganz := Inhaltcsvdateiganz.Create();
        bildganz.Bildname := Bildnameneu;
        Bildnamehilfe:= Bildnameneu;
        bildganz.Zeile := iZeile;
        lstganz.Add(bildganz);
      end;
      end;
   finally
       CloseFile(g);
   end;
  GridKorrekteGrid.RowCount:= lstganz.Count+1;
  GridKorrekteGrid.ColWidths[0]:= Canvas.TextWidth(bildganz.Bildname) +10;
  for i:= 0 to lstganz.Count - 1 do
  begin
    GridKorrekteGrid.cells[0,i+1]:= Inhaltcsvdateiganz(lstganz[i]).Bildname;
  end;
end;

procedure Tfrminhaltcsv.RadioGroupClick(Sender: TObject);
begin
  if RadioGroup.ItemIndex = 0 then
  begin

  end
  else
  begin

  end;
end;

end.
Blub ich bin die Sig.
  Mit Zitat antworten Zitat