Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi csv Datei bearbeiten (https://www.delphipraxis.net/56341-csv-datei-bearbeiten.html)

ascotlx 4. Nov 2005 09:49


csv Datei bearbeiten
 
Hallo,

ich hab ein Problem und hoffe, dass mir jemand helfen kann - da ich mir mal wieder
selber im weg stehe.

Ich gebe in ein MaskEdit Feld eine Zahl ein, diese Zahl wird in einer csv Datei
gesucht und wenn diese gefunden wird, werden 9 weitere Edit und MaskEdit Felder mit
Werten gefüllt - bis dahin alles ok.
Nun wird in einem der Edit und/oder MaskEdit Felder ein Wert geändert. Jetzt soll die
Zeile, die in der cvs Datei steht mit den geänderten Werten angepasst werden.

Ich hatte schon diverse Ansätze, finde aber keinen funktionierenden Weg oder bleibe
auf der halben Strecke liegen.

Ich kann die geänderte Zeile an die Datei anfügen, damit habe ich aber noch die alte Zeile
in der Datei stehen.

Ich habe die Funktion EXPLOED aus diesem Forum benutzt, um mir die einzelnen Felder in ein
Array einzulesen ... aber ich weiss nicht weiter ... :wall:

Kann mir jemand helfen ??

Gruss

ascotlx

ichbins 4. Nov 2005 10:12

Re: csv Datei bearbeiten
 
probier einfach was anderes, z.B.
Delphi-Quellcode:
file of integer

So zu verwenden:
Delphi-Quellcode:
assignfile(f,filename); //Dateinamen zuweisen.
reset(f);              //Datei öffnen.
seek(f,newpos);        //An eine bestimmte Position springen.
filepos(f);            //Gibt die Position in der Datei zurück.
read(f,v);             //Liest ein Element der Datei (bei file of integer 4 Byte) in v ein.
write(f,v);            //Schreibt v in die Datei. Das ursprüngliche Element wird überschrieben.
closefile(f);          //Datei schliessen.
rewirte(f);            //Datei wird erstellt/überschrieben und dann geöffnet.
erase(f);              //Datei wird gelöscht. Nur möglich wenn nicht geöffnet.
filesize(f);           //gibt die Anzahl der Blöcke in der Datei zurück.
eof(f);                //gibt ein Bool zurück, ob das Dateiende erreicht wurde.

shmia 4. Nov 2005 10:27

Re: csv Datei bearbeiten
 
CSV Dateien haben keine feste Satzlänge.
Deshalb gibt es nur 2 Möglichkeiten eine CSV-Datei zu verändern.
  • die gesamte CSV-Datei wird in eine Stringliste eingelesen, verändert und dann wieder gespeichert
  • die CSV-Datei wird bis zum zu ändernden Record in eine hilfsdatei kopiert. Dann wird der geänderte Record an die Hilfsdatei angehängt. Der fehlende Rest wird von der CSV-Datei an die Hilfsdatei angehängt. CSV-Datei löschen und Hilfsdatei umbenennen
Schau dir mal meinen CSV Editor an. Man kann damit zwar noch nicht wirklich editieren,
aber es fehlt nicht mehr viel dazu.
http://www.delphipraxis.net/internal...ct.php?t=61227

ascotlx 7. Nov 2005 10:31

Re: csv Datei bearbeiten
 
moin ,

danke für die Hilfe ...

falls es jedemanden interessiert, meine Lösung (bestimmt nicht schön .. funkioniert aber)
Ich arbeite nun mit einer Zwischendatei ...

Delphi-Quellcode:
procedure kddaten_schreiben(const Ergebnis: integer);
var
  zeile, file_in, file_out: string;
begin
  file_in:='c:\text.txt';
  file_out:='c:\text2.txt';

  if erg < 99 then // erg wird in einer anderen prozedur gesetzt
    begin
      // zwischendatei anlegen
      AssignFile(mc_filename2, 'c:\mc_liz_kd2.txt');
      {$I-}Rewrite(mc_filename2);{$I+}
      if IOResult>0 then
        ShowMessage('Fehler beim Anlegen der Zwischendatei');

      // kunden daten datei öffnen
      AssignFile(mc_filename, 'c:\mc_liz_kd.txt');
      {$I-}Reset(mc_filename);{$I+}
      if IOResult=0 then
      // bis zum ende der datei zeileweise lesen
      while not Eof(mc_filename) do
        begin
          Readln(mc_filename,zeile);
          if Pos(hdl,zeile) <> 1 then
            writeln(mc_filename2,zeile);
        end;
      // geänderte Zeile schreiben
      writeln(mc_filename2,frm_liz_mgr.MaskEdit4.Text+';'+frm_liz_mgr.MaskEdit5.Text+';'+frm_liz_mgr.Edit6.Text+';'+frm_liz_mgr.Edit7.Text+';'+frm_liz_mgr.MaskEdit1.Text+';'+frm_liz_mgr.Edit8.Text+';'+frm_liz_mgr.Edit9.Text+';'+frm_liz_mgr.Edit10.Text+';'+Trim(frm_liz_mgr.MaskEdit2.Text)+';'+Trim(frm_liz_mgr.MaskEdit3.Text)+';');
      CloseFile(mc_filename);
      CloseFile(mc_filename2);
      // Alte Datei löschen, Zwischendatei umkopieren
      deleteFile(file_in);
      RenameFile(file_out,file_in);
    end;

   // kunden daten datei öffnen
   AssignFile(mc_filename, 'c:\mc_liz_kd.txt');
   {$I-}Append(mc_filename);{$I+}
   if IOResult=0 then
     begin
       if erg = 100 then
         writeln(mc_filename,frm_liz_mgr.MaskEdit4.Text+';'+frm_liz_mgr.MaskEdit5.Text+';'+frm_liz_mgr.Edit6.Text+';'+frm_liz_mgr.Edit7.Text+';'+frm_liz_mgr.MaskEdit1.Text+';'+frm_liz_mgr.Edit8.Text+';'+frm_liz_mgr.Edit9.Text+';'+frm_liz_mgr.Edit10.Text+';'+Trim(frm_liz_mgr.MaskEdit2.Text)+';'+Trim(frm_liz_mgr.MaskEdit3.Text)+';');
     end;

   CloseFile(mc_filename);
end;
Gruss
ascotlx


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 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