AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In eine CSV Datei Reinschreiben???

Ein Thema von r3v0 · begonnen am 15. Aug 2007 · letzter Beitrag vom 17. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 15:03
Hier würde sich ein CSV-DataSet anbieten. Auf dieses kannst du dann wie auf eine Datenbank zugreifen.
Markus Kinzler
  Mit Zitat antworten Zitat
r3v0

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

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 15:10
Öhm???
Hmm wie wo was...
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 15:14
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)
Markus Kinzler
  Mit Zitat antworten Zitat
r3v0

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

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 15:31
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.
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 15:41
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.
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 16:00
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 16:02
Zitat von mkinzler:
Die Datei zu editieren ist schwer. du müsstest sie in den speicher laden, verändern und zurückschreiben.
Und was ist daran schwer? Das ist doch schnell gemacht:

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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 16:07
Zitat:
Und was ist daran schwer? Das ist doch schnell gemacht:
wenn man sich auskennt natürlich nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
r3v0

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

Re: In eine CSV Datei Reinschreiben???

  Alt 15. Aug 2007, 16:49
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.
Blub ich bin die Sig.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz