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.