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
Antwort Antwort
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

dat-Datei in kleinere aufteilen + nach Seitenumbruch suchen

  Alt 17. Jun 2004, 16:26
Wer kann mir helfen?

Ich habe eine riesig grosse test.dat-Datei, sie ist angenommen 15 MB gross. Dieses soll nun in kleinere Dateien zerlegt werden, je etwa 1 MB gross. Dabei ist darauf zu achten, dass es dort Seitenumbrüche gibt.

Also, ich möchte erst mal alles was bis zu 1 MB ist auf jeden Fall in eine neue Datei haben, ab dieser Position muss ich jetzt nach dem nächsten Seitenumbruch suchen. Bis zu diesem Seitenumbruch soll das ganze noch mit in die Datei, nach diesem Umbruch soll es in die nächste Datei. Wenn ich dann wieder etwa 1 MB habe, muss ich wieder nach einem Seitenumbruch suchen, usw bis zum Ende der Datei.

Wie mache ich das nun?

Ich danke euch schon mal für die Hilfe.
Susanne
Susanne
  Mit Zitat antworten Zitat
BKempf

Registriert seit: 1. Jun 2004
103 Beiträge
 
Delphi 6 Enterprise
 
#2

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

  Alt 17. Jun 2004, 16:37
Die einfachste, aber nicht gerade ressourcenschonendste Moeglichkeit waere, 1048576 Bytes zu lesen und in die erste Zieldatei zu schreiben. Danach so lange je 1 Byte rueberkopieren, bis ein Seitenumbruch gefunden wurde.
Anschliessend wiederholst du das mit dem Rest der Quelldatei, bis sie komplett zerlegt wurde.
The problem with troubleshooting is that sometimes the trouble shoots back.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

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

  Alt 17. Jun 2004, 16:40
hallo und herzlich wilkommen

das thema hatten wir schon des öfteren, dateien splitten und durchsuchen, es gibt einen gute suchfunktion hier :Hier im Forum suchengrosse datei

gruß rené
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#4

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

  Alt 17. Jun 2004, 16:46
... da war vor kurzem noch mal so ein thema fällt mir gerade ein....

in datei string suchen oder so
  Mit Zitat antworten Zitat
Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#5

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

  Alt 17. Jun 2004, 16:59
irgendwie habe ich völlig ein Brett vor dem Kopf gerade.

Hier mal mein Funktion, er teilt meine Grosse Datei schon in kleiner auf, nur eben nicht an der richtigen Stelle. Vielleicht könnt ihr mir anhand dieses Codes ein wenig auf die Sprünge helfen, wäre echt toll.


Delphi-Quellcode:
function TForm1.DateiAufteilen(Dateiname: String; DateiSize: LongInt): Boolean;
var
   Teile: Integer;
   ats, ts: TFileStream;
   edg, s: String;
   x: Integer;
begin
   Teile:= Round(DateiSize/1000000);
   edg:= ExtractFileExt(Dateiname);
   // veränderter DateiName: ursprünglicher und _
   s:= ChangeFileExt(ExtractFileName(Dateiname),'')+ '_';
 
   ts:=TFileStream.create(Dateiname, fmopenread);
   if ts.Size > 1000000 then
      begin
         for x:=1 to Teile2 do
            begin
               ats:= TFileStream.create(DestinationDir + '\' + s + IntToStr(x)+ edg, fmcreate);
               
               //gucken, wann kommt der nächste Seitenumbruch (1)?
               
               ats.CopyFrom(ts, ts.size div Teile2);
            end;
      end;
     DeleteFile(Dateiname);
end;
Susanne
  Mit Zitat antworten Zitat
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, 08: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
Antwort Antwort


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 04:32 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