AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei bei 100 MB Truncaten

Ein Thema von af99 · begonnen am 16. Jul 2015 · letzter Beitrag vom 18. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#1

Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 09:18
Delphi-Version: XE5
Hallo Zusammen,

ich möchte eine Textdatei auf 100MB kürzen.
Folgendes habe ich gemacht
Delphi-Quellcode:
var
  FileStream : TFileStream;

begin
  FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + 'log.txt', fmopenreadwrite);
  try
    if FileStream.Size > 1000000 then
    begin
      FileStream.Size := 1000000;
      FileStream.Position := FileStream.Size;
    end;
  finally
    FileStream.Free;
  end;
end;
Jetzt ist es in der Regel so das die letzet Zeile irgendwo abgeschnitten wird. Ich möchte aber das in der Datei nur vollständige Zeilen enthalten sind. Wie kann ich also die letzte unvollständige Zeile löschen?

Viele Grüße
Andreas
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 09:27
Hallo,

Du könntest beim Beschreiben der LogDatei prüfen ob die maximale Dateigröße erreicht ist.
Ist sie erreicht wird die Datei abgeschnitten - bevor ein neuer Eintrag eingetragen wird.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 09:43
Bevor du die Größe änderst, lade einen Block vor der Stelle wo du kürzen willst. Dann suche rückwärts bis zum ersten Zeilenumbruch. Wenn du da keinen findest, musst du eben noch einen Block vorher laden.

Dann hast du die Stelle und kannst die Größe entsprechend ändern.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#4

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 11:53
@Klaus01: geht nicht da ich immer die alten Einträge abschneiden möchte.
@BUG: wie finde ich denn die Stelle bei genau 100MB?
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 12:04
@BUG: wie finde ich denn die Stelle bei genau 100MB?
So: FileStream.Position := 1000000; . Du möchtest allerdings ein Stück nach vorne, um von da aus bis 1MB zu lesen.
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#6

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 14:49
ok, soweit bin ich nun
Delphi-Quellcode:
const
  MaxLen = 1024;
var
  FileStream : TFileStream;
  Writer: TStreamWriter;
  Reader: TStreamReader;
  buffer: string;
  posCRLF: Integer;

begin
  try
    FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + 'log.txt', fmopenRead);//fmOpenRead or fmShareDenyWrite);
    Writer := TStreamWriter.Create(FileStream);
    Reader := TStreamReader.Create(FileStream);

    filestream.Position := 999900;

    buffer := Reader.ReadToEnd;

    posCRLF := pos('#13#10' , buffer);

    ShowMessage('pos: ' + inttostr(posCRLF));

    ShowMessage('buffer: ' + buffer);

    if FileStream.Size > 1000000 then
    begin
      FileStream.Size := 1000000;
    end;
  finally
    Writer.Free;
    Reader.Free;
    FileStream.Free;
  end;
end;
Mein pos mit dem ich dachte das ich das carriage return finden kann findet es aber nicht
Wie kann ich denn das carriage return finden?

Gruss
Andreas
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 14:52
Hallo,

das CRLF wird in der Datei nicht als String '#13#10' enthalten sein.
Die entsprechenden Zeichen musst Du suchen char(13).

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 15:49
posCRLF := pos(#13#10 , buffer); Unter der Voraussetzung, dass in der Textdatei überhaupt #13#10 steht und nicht nur #13 oder nur #10 oder ganz komisch #10#13
  Mit Zitat antworten Zitat
Benutzerbild von Capstone
Capstone

Registriert seit: 15. Jul 2013
Ort: NRW
23 Beiträge
 
Delphi 3 Professional
 
#9

AW: Textdatei bei 100 MB Truncaten

  Alt 16. Jul 2015, 21:15
photoshop_CC_x64.rar.txt hat übrigens ~2600 MB ...

mußte also 26 x die Text-Datei kürzen

** hust **
MySQL-ERROR(): 1146
- - - Entschuldigung,
Diese Signatur ist in Deinem Land nicht vollständig sichtbar. :/
PGP Key ID: 0xB54AACD6

Geändert von Capstone (16. Jul 2015 um 21:18 Uhr)
  Mit Zitat antworten Zitat
af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#10

AW: Textdatei bei 100 MB Truncaten

  Alt 17. Jul 2015, 08:12
Irgendwie bekomme ich es nicht hin genau bis zum CR LF abzuschneiden. So habe ich es versucht
Delphi-Quellcode:
var
  FileStream : TFileStream;
  Reader: TStreamReader;
  buffer: string;
  posCRLF: Integer;

begin
  try
    FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + 'log.txt', fmopenreadwrite);
    Reader := TStreamReader.Create(FileStream);

    if FileStream.Size > 1000000 then
      FileStream.Size := 1000000;
    filestream.Position := 999900;
    buffer := Reader.ReadToEnd;

    FileStream.Size := 999900 + SizeOf(copy(buffer, 1, pos(char(13) , buffer)));
  finally
    Reader.Free;
    FileStream.Free;
  end;
end;
Er schneidet aber immer zu viel ab.
Weis einer wie ich ich es richtig berechnen muss?

Gruss
Andreas

Geändert von af99 (17. Jul 2015 um 09:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:26 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