Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten anhängen (https://www.delphipraxis.net/8429-daten-anhaengen.html)

Ringer 4. Sep 2003 14:39


Daten anhängen
 
Hallo Zusammen,

folgendes Problem: Ich habe mehrere Textdateien welche ich auslesen will und deren Inhalt in einer Textdatei zusammenfassen will. Die Dateien haben folgende Struktur:

Dateiname: file1.txt
file2.txt...

Dateiinhalt: daten1,daten2,... (aber nur eine Zeile!)

Die "große" Enddatei soll dann den Inhalt der einzelnen Datei zeilenweise! beinhalten.

Ich habe schon mit eof und append rumprobiert aber irgendwie stelle ich mich als Anfänger (oder überhaupt :wink: ) falsch an!

Daher wäre ich über Tips oder sogar etwas Code dankbar!

mfg

Ringer

Tpercon 4. Sep 2003 14:49

Re: Daten anhängen
 
Wie kommst du an die ganzen Dateien die einzulesen sind?

Ringer 4. Sep 2003 14:52

Re: Daten anhängen
 
Die Dateien werden von verschiedenen Anwendern in einen zentralen Ordner zur Informationsübergabe bereitgestellt. Also ist so eine Art Datenbündelung, aber es müssen Textdateien sein!

Tpercon 4. Sep 2003 14:55

Re: Daten anhängen
 
Das Einlesen aller Dateinamen dürfte ja dank FindFirst, FindNext,... kein Problem darstellen.
Das nächste Zauberwort heißt dann Schleife.

Ringer 4. Sep 2003 15:03

Re: Daten anhängen
 
Naja dadurch das alle Dateien eh in einen Verzeichnis sind ist das nicht das Problem.

Ich weiss auch die Schleife ungefähr so aussehen muss:

Delphi-Quellcode:
for i=1 to 50 (zahl ist egal) do
  begin
    if fileExists('file'+i+'.txt') then...
ich hoffe das ist nicht totaler mist :D . Aber wie ich jetzt die eine Zeile aus der Datei auslese (das geht noch) und die dann in einer Datei zusammenfasse...

Tpercon 4. Sep 2003 15:22

Re: Daten anhängen
 
Natürlich ungetestet, sollte aber die Vorgehensweise klar machen.
Delphi-Quellcode:
var ts_main, ts: TStringList;
begin
  ts_main := TStringList.Create;
  try
    ts := TStringList.Create;
    try
      for i := 1 to 50 do //hier deine dateien laden, woher auch immer
        ts.LoadFromFile(dateixy);
        if ts.Count > 0 then begin
          ts_main.Add(ts.Strings[0]);
        end;
    finally
      ts.Free;
    end;
    ts_main.SaveToFile(Haupdatei);
  finally
    ts_main.Free;
  end;

Ringer 4. Sep 2003 15:34

Re: Daten anhängen
 
Sorry verstehe ich aber nicht! Vielleicht habe ich mich auch schlecht ausgedrückt :?: Aber es kann auch sein das eine Datei nicht da ist. Außerdem will ich das in der Hauptdatei die Einträge Zeile für Zeile vorliegen. Vielleicht könntest du mir als blutiger Anfänger noch einen Kommentar dazu schreiben :D

mfg

Ringer

Dannyboy 4. Sep 2003 15:36

Re: Daten anhängen
 
Ich code Dir hier mal eben das Kopieren des Inhaltes einer Datei in
eine andere runter und danach sage ich noch was zum Anhängen.

Dieser Stil ist ein alter Pascal-Stil, den ich noch von damals aus dem
Abi kann. Es gibt viele, andere Mittel dieses Problem zu lösen,
Ich bin gerade auf der Arbeit und habe deshalb kein Delphi zur Hand.
Ich konstruiere das mal eben "per Stift"! Ich werde Dir alles
ausreichend dokumentieren, damit Du es nachvollziehen kannst.


Delphi-Quellcode:
// Erst mal Pfad von Quelle und Zieldatei definieren:

Const Quelle = 'C:\Quelle.dat';
Const Ziel = 'C:\windows\Desktop\Ziel.dat';

// Datenstruktur Deiner Datei

Type TRecord = Record
               ...    // was auch immer, pack's einfach rein.
               end;

Var QuellDat, ZielDat : File of TRecord;   // Dateizuweisung des Datentyps!

Var Hilf : TRecord; // Muss äquivalent mit "File of" sein !!!

Begin
  AssignFile(QuellDat, Quelle); // QuellDat-Variable des ext. Namen zuweisen
  Reset(QuellDat);              // vorhandene Datei öffnen
  If IOResult = 0 then          // Wenn kein Fehler ...
  begin
    AssignFile(ZielDat, Ziel);  // ZielDat-Variable des ext. Namen zuweisen
    Reset(ZielDat);             // vorhandene Datei öffnen
    If IOResult <> 0 then       // Wenn Datei nicht vorhanden ...
      Rewrite(ZielDat);         // ... Erstelle neue Datei
    While not Eof(QuellDat) Do  // Solange Datei nicht am Ende
    Begin
      Read(QuellDat, Hilf); // Lese Record von QuellDat
      Write(ZielDat, Hilf); // Schreibe Record in ZielDat
    end
  end
  else { Fehler };        // Fehlerbehandlung    
  CloseFile(QuellDat); // Schließe QuellDat  
  CloseFile(ZielDat);  // Mach zu, das Ding
end;
So, zum Anhängen von Informationen an eine Datei machst Du Folgendes:

Delphi-Quellcode:
Type TDatei = File of String; // muss nicht String sein, bloß ein Beispiel

Function PrepareForAppend(Var Datei : TDatei; FileName : String) : Boolean;
Begin
  AssignFile(Datei, FileName);  // Wieder mal einer Dateiveriable den ext. Namen zuweisen
  Reset(Datei) // Vorhandene Datei öffnen.
  If IOResult <> 0 then
    Rewrite(Datei) // Bei nicht vorhanden sein, neu erstellen
  {Und jetzt kommt der Knackpunkt!}
  Seek(Datei, FileSize(Datei)); // Wir setzen den Cursor auf das Dateiende und damit können wir weitere Infos anhängen (konkatinieren)
  Result:= (IOResult = 0) AND FileExists(FileName); // True, wenn kein Fehler + Datei vorhanden !
end;
Also Leute, macht's gut. Ich fahre nun heim.
DANNYBOY


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