![]() |
In eine CSV Datei Reinschreiben???
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. |
Re: In eine CSV Datei Reinschreiben???
Hier würde sich ein CSV-DataSet anbieten. Auf dieses kannst du dann wie auf eine Datenbank zugreifen.
|
Re: In eine CSV Datei Reinschreiben???
Öhm???
Hmm wie wo was... |
Re: In eine CSV Datei Reinschreiben???
Es gibt verschiedene DataSet-Komponenten z.B. in der JVCL, welche eine CSV-Datei als DataSet kappseln. Dieses kann man dann mit datensensitiven Komponenten verbinden und wie jedes andere DataSet manipulieren (First, Next, Last, Edit, Post)
|
Re: In eine CSV Datei Reinschreiben???
Hmm dafür brauch ich aber keine Datenbank oder?
Kann ich nicht einfacher das machen? Ich habe die Zeilenangabe in die ich reinschreiben muss. und ich habe die werte. Kann ich dann nicht einfach die Zeile neuschreiben? und hinten einfach nur ;JA dranhängen? nur kapier ich noch nicht so ganz wie zum teufel ich in die datei schreiben kann. |
Re: In eine CSV Datei Reinschreiben???
Die Datei zu editieren ist schwer. du müsstest sie in den speicher laden, verändern und zurückschreiben.
Für meinen Vorschlag bräuchtest du keine Db sondern die CSV-Datei wird als DB betrachtet. |
Re: In eine CSV Datei Reinschreiben???
Und dann gäbe es noch die Möglichkeit eine CSV-Datei komplett in ein TStringGrid Control zu laden.
Jede Änderung wird im StringGrid vorgenommen. Erst wenn der Benutzer auf Speichern klickt, wird das TStringGrid Control wieder als CSV-Datei gespeichert. Die orginale CSV-Datei wird dabei komplett überschrieben. (keine Aktualisierung einzelner Felder oder Datensätze) Das ist weniger elegant als das CSV-Dataset, aber man kommt mit Delphi Bordmitteln aus. PS: das ist der Weg, den mkinzler schon mit du müsstest sie in den speicher laden, verändern und zurückschreiben angedeutet hat. |
Re: In eine CSV Datei Reinschreiben???
Zitat:
Delphi-Quellcode:
procedure AddCSVLine(Filename: String; const Values: array of const);
var i: Integer; s: String; begin for i := 0 to length(Values) - 1 do begin s := s + Values[i].VPChar + ';'; end; ShowMessage(s); end; procedure TForm1.Button1Click(Sender: TObject); begin AddCSVLine('foobar.csv', ['Wert1', 'Wert2', 'Wert3', 'Wert4']); end; |
Re: In eine CSV Datei Reinschreiben???
Zitat:
|
Re: In eine CSV Datei Reinschreiben???
Hmm......
Ja Mir ist eben noch eingefallen das es sich um ein Multiuser system handeln wird. Das heißt die CSV als Datenbank herzrichten wäre nciht verkehrt.! Mach ich das dann über Systemsteuerung - > Verwaltung - > Datenquellen (ODBC) --> Hinzufügen --> Microsoft Text Treiber (*.txt , *.csv) Und nachher mit ner ADO connection auf des Teil? Und wie sieht es aus kann ich dann ohne das ich auf den anderen PC´s irgendwas installiere das Programm nutzen? Davon habe ich leider null ahnung. Wäre nett wenn es mir einer wenn er kurz zeit hat step by step kurz schreibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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