Thema: Delphi Text Datei teilen

Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: Text Datei teilen

  Alt 23. Feb 2007, 16:23
Also gut; die Prozedur kann in das Formular, ein Datenmodul oder "sonstwo" eingebunden werden.
Delphi-Quellcode:
// sQuelldatei ist der vollständige Dateiname
// sZieldatei ist als Format-String gedacht: "E:\Temp\Geteilt_%3.d.Txt",
// dort wird der Zähler der Teildateien eingefügt
// iMaximum ist die maximale Anzahl von Zeichen pro Teildatei
procedure DateiTeilen(const sQuellDatei: string; const sZielDatei: string; const iMaximum: int);
var aQuelle, aZiel: TStringList;
    iSumme, iStart, iZaehler, x0: int;
begin
  // Initialisierungen
  iSumme := 0;
  iStart := 0;
  iZaehler := 0;
  aQuelle := TStringList.Create;
  aZiel := TStringList.Create;
  try
    // Quelle einlesen
    aQuelle.LoadFromFile(sQuellDatei);
    // bearbeite alle Zeilen
    for x0:= 0 to aQuelle.Count - 1 do
    begin
      Inc(iSumme, aQuelle[x0]+2);
      // wenn diese Summe schon zuviel ist, dann neue Teildatei erzeugen
      if iSumme > iMaximum
      then begin
        Inc(iZaehler);
        aZiel.SaveToFile( Format(sZielDatei, [iZaehler]) );
        // Daten zurücksetzen
        aZiel.Clear;
        iSumme := aQuelle[x0] + 2;
      end;
      // aktuelle Zeile kopieren
      aZiel.Add(aQuelle[x0]);
    end;
    // letzte Teildatei speichern
    Inc(iZaehler);
    aZiel.SaveToFile( Format(sZielDatei, [iZaehler]) );
  finally
    aQuelle.Free;
    aZiel.Free;
    if iZaehler > 0
    then ShowMessage( Format("%d Teildateien erzeugt", iZaehler) );
  end;
end;
Bei der Summe habe ich immer 2 Zeichen addiert wegen CR/LF.

Was Dir jetzt noch fehlt, bitte selbst überlegen und unter Delphi-Referenz durchsuchenDelphi heraussuchen. Nicht getestet und ohne Gewähr - siehe Signatur.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat