Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Seitenumbrüche in Textdatei zählen (https://www.delphipraxis.net/56580-seitenumbrueche-textdatei-zaehlen.html)

Bea 8. Nov 2005 09:07


Seitenumbrüche in Textdatei zählen
 
Hallo,

wie kann ich in einer Textdatei alle Seitenumbrüche zählen?

Danke im Vorraus
Bea

simonko 8. Nov 2005 09:11

Re: Seitenumbrüche in Textdatei zählen
 
gar nicht. seiteumbruch hängt imho vom texteditor ab in dem man die textdatei anschaut. man kann aber die zeilenumbrüche zählen, weil das einfach normale zeichen sind die dem texteditor sagen dass er die nächste zeile in einer neuen zeile darstellen soll.

Bea 8. Nov 2005 09:41

Re: Seitenumbrüche in Textdatei zählen
 
Hallo,

das Zählen der Zeilenumbrüche nützt mir aber nichts denk ich.
Die Textdatei ist ungefähr so aufgebaut:

Zeilenumbruch
Zeilenumbruch
Zeilenumbruch
Text blabla
Text blabla
Text blabla
Text blabla
Zeilenumbruch
Zeilenumbruch
Zeilenumbruch
SEITENUMBRUCH
Zeilenumbruch
Zeilenumbruch
Zeilenumbruch
Text blabla
...
...

Ich muss genau wissen, wieviel Seitenumbrüche in der Datei enthalten sind.
Im Editor z.B. sind diese Seitenumbrüche auch als sichtbar.
Schaue ich mir diese Datei z.B. mit UltraEdit im Hex-Modus an, steht da ein 0C.
Also dachte ich mir, ich könnte alle vorkommenden 0C zählen, weiß aber nicht , wie das geht.

CU Bea

xaromz 8. Nov 2005 09:54

Re: Seitenumbrüche in Textdatei zählen
 
Hallo,

da gibt es mehrere Möglichkeiten, die ja nach Größe der Datei performanter sind.
Die einfachste Möglichkeit ist, die Datei in einen Stream zu laden und dann einfach die Zeichen durchzugehen. Sobald Du auf den Wert $0C triffst, erhöhst Du einen Zähler.
Dabei solltest Du beachten, dass bei kleinen Dateien ein MemoryStream besser ist, bei großen Dateien (viele MB) ein FileStream.

Gruß
xaromz

Sharky 8. Nov 2005 09:57

Re: Seitenumbrüche in Textdatei zählen
 
Hai Bea,

das einfachste dürfte sein die Datei in einen Stream zu laden und dort dann nach $0C (ASCII-Code für ein FormFeed) zu suchen.

Edit: Da war einer schneller ;-)

Bea 8. Nov 2005 10:14

Re: Seitenumbrüche in Textdatei zählen
 
Hallo,
zuerst einmal vielen Dank für die schnellen Antworten.
Ich habe da im Forum etwas gefunden und versucht für mich passend zu machen.
Wäre das so richtig?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var FS: TFileStream;
    Buffer: Array of Byte;
    I,Z: Integer;

  Begin
  z:=0;
    Try  
      {Datei öffnen}
      FS := TFileStream.Create('C:\OZF\vr130_ar_54871.txt', fmOpenReadWrite);

      {Speicher für Buffer allozieren} 
      SetLength(Buffer,FS.Size);

      {Daten einlesen (8ung: Buffer>>[0]<<} 
      FS.Read(Buffer[0],Length(Buffer));

      {Bytefolge suchen}
      For I := 0 to Length(Buffer) - 3 do
        If (Buffer[I] = $0C)
          Then Begin
          Inc(Z);
        End;
      FS.Free;

      ShowMessage('Anzahl: '+IntToStr(Z));

    Except
      On EFOpenError do ShowMessage('Datei konnte nicht geöffnet werden');
      Else ShowMessage('Unbekannter Fehler');
    End;
  End;
CU Bea

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Christian Seehase 8. Nov 2005 10:35

Re: Seitenumbrüche in Textdatei zählen
 
Moin Bea,

sieht, im Wesentlichen, richtig aus, nur warum die Schleife bis Length-3 geht ist mir nicht klar.
Ich würde sie bis Length-1 laufen lassen.
Ausserdem sollte nach dem Create noch ein try/finally-Block beginnen (Resourcenschutzblock).
Warum eigentlich fmOpenReadWrite? Lesen müsste genügen.

Der_Unwissende 8. Nov 2005 10:40

Re: Seitenumbrüche in Textdatei zählen
 
Im Prinzip richtig, aber gibt es einen Grund, warum du die letzten zwei Byte deiner Datei ignorierst?

Ansonsten gibt es halt ein paar Kleinigkeiten, nichts wildes.
So brauchst du die Datei eigentlich nicht extra zum Schreiben öffnen, solltest aber das Schreiben in die Datei verbieten
Delphi-Quellcode:
Fs := TFileStream.Create(FileName, fmOpenRead or fmDenyWrite);
Ja, dann sollte deine Textdatei nicht all zu groß sein, da du immer den ganzen Stream in den buffer kopierst, aber denke einfach mal, dass ist bei deiner Datei noch nicht entscheident.
Und ansonsten solltest du den Speicher, der für Buffer alloziert wurde ruhig wieder freigeben.
Delphi-Quellcode:
finalize(buffer);
buffer := nil;
Gruß Der Unwissende

xaromz 8. Nov 2005 10:43

Re: Seitenumbrüche in Textdatei zählen
 
Hallo,

noch eine Anmerkung:
Wenn Du mit TFileStream eine Datei öffnest und dann in einen Buffer schreibst, kannst Du auch gleich einen TMemoryStream nehmen. Der macht nämlich genau das gleiche. Da gibt's dann die Eigenschaft Memory.

Gruß
xaromz

H4ndy 8. Nov 2005 12:20

Re: Seitenumbrüche in Textdatei zählen
 
Xaromz hat recht.
Falls du bei einem FileStream bleiben willst, würde ich das so machen:
(Dürfte nur, wenn ich mir das richtig überlege recht langsam sein)

Delphi-Quellcode:
var FS: TFileStream;
    buf: byte;
    UmbruchCount: integer;
begin
  UmbruchCount := 0;

  FS := nil;
  try
    // Datei zum lesen öffnen, Schreiben verbieten
    FS := TFileStream.Create('C:\bla.txt',fmOpenRead or fmShareDenyWrite);

    // Gesammten FileStream Byte-weise durchlaufen
    while FS.Position < FS.Size do begin
      FS.Read(buf,sizeof(buf));
      if buf = $0C then
        inc(UmbruchCount);
    end;
  finally
    FS.Free;
  end;
(Ich hoffe der Code funktioniert, konnte jetzt leider nicht testen :?)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.
Seite 1 von 2  1 2      

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