AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi dat-Datei in kleinere aufteilen + nach Seitenumbruch suchen
Thema durchsuchen
Ansicht
Themen-Optionen

dat-Datei in kleinere aufteilen + nach Seitenumbruch suchen

Ein Thema von Susanne · begonnen am 17. Jun 2004 · letzter Beitrag vom 11. Aug 2004
 
Benutzerbild von Luckie
Luckie

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

Re: dat-Datei in kleinere aufteilen + nach Seitenumbruch suc

  Alt 11. Aug 2004, 07:23
Am einfachsten geht es mit StringListen:
Delphi-Quellcode:
function SplitTextFileAtEmptyLines(Handle: THandle; const aFilename, aDir:
  string): integer;
var
  sl, sl2, sl3: TStringList;
    // sl: Ursprungsdatei, sl2: Teildateien, sl3: Dateiliste
  PN: string; // Patentnummer für Dateiname
  Loop: Integer;
  cntFile: Cardinal;
  Dir, PartFilename: string;
  s: string; // Zeile aus Ursprungsdatei
  Filenames, TextFileFilenames: string;
begin
  SetLastError(0);
  // sicherstellen, dass der Pfad ohne Backslash endet
  Dir := ExcludeTrailingBackslash(aDir);
  cntFile := 1;
  // Stringlisten erzeugen
  sl := TStringList.Create;
  sl2 := TStringList.Create;
  sl3 := TStringList.Create;
  try
    // Ursprungsdatei in die SL laden
    sl.LoadFromFile(aFilename);
    // so lange nicht die letzte Zeile erreicht ist
    for Loop := 0 to sl.Count - 1 do
    begin
      // Zeile lesen und an sl2 anhängen
      s := sl.Strings[Loop];
      OutputDebugString(PChar(s));
      sl2.Add(s);
      // wenn s leer oder Ende von Ursprungsdatei erreicht Teildatei speichern
      if (s = '') or (Loop = sl.Count - 1) then
      begin
        // Teildateiname genrieren
        PN := copy(sl2.Strings[0], 5, 13);
        PN := StringReplace(PN, ' ', '_', [rfReplaceAll]);
        PartFilename := BuildPartFilename(Dir + '\' +PN + '.txt', cntFile);
        // speichern
        sl2.SaveToFile(PartFilename);
        // sl2 wieder leeren
        sl2.Clear;
        // Nachricht mit aktuellen Dateinamen an eigenes Fenster schicken
        SendMessage(Handle, M_FILENAME, 0,
          Integer(PChar(ExtractFilename(PartFilename))));
        // Benutzer hat "Abbrechen" geklickt -> Schleife verlassen
        if bCancel <> 0 then
          break;
        // Zeile für Dateiliste mit Dateinamen erzeugen
        Filenames := Filenames + ExtractFilename(ChangeFileExt(PartFilename, ''))
          + ' ';
        if cntFile mod 3 = 0 then // zwei Dateinamen pro Zeile
        begin
          sl3.Add(Filenames);
          Filenames := '';
        end;
        // Zählvariable für Teildateinamen erhöhen
        Inc(cntFile);
      end;
    end;
    sl3.Add(Filenames);
    // Name für Dateiliste erzeugen
    TextFileFilenames := aDir + '\' + ExtractFilename(ChangeFileExt(aFilename,
      '')) + TextFileFilesnamesExt;
    sl3.SaveToFile(TextFileFilenames);
  finally
    // Aufräumen
    FreeAndNil(sl);
    FreeAndNil(sl2);
    FreeAndNil(sl3);
    // Fertig -> "Fertig"-Nachricht an eigenes Fenster schicken
    SendMessage(Handle, M_FINISH, 0, 0);
    result := GetLastError();
  end;
end;
Du musst einfach nur immer kucken wie viel du in sl2 reingeschrieben hast an Zeichen. Dabei gilt ein Zeichen ist ein Byte. Delphi-Referenz durchsuchenlenght(sl2.Text) würde dir dann die Dateigröße in Byte zurückgeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
 


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 05:48 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