Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Unter Vernachlässigung des Dateientyps Dateien editieren

  Alt 6. Aug 2007, 19:15
Moin Nikolai,

Zitat von inherited:
Was gefällt dir an Streams nicht? Damit lädst du eine Datei Byteweise in ein Array, wandelst sie in Chars um und fügst sie einem Memotext hinzu:
Wobei das hier
      Memo1.text:=Memo1.Text+Char(MyArray[i]); ein Performancekiller erster Güte ist

Ausserdem wird's interessant, sobald eine #00 im Dateiinhalt vorkommt.

Besser wäre es wohl die Daten gleich als Hexwerte darzustellen.

Delphi-Quellcode:
var
  sBuf : string;
  sResult : string;
  i : integer;
  iPos : integer;
  iCount : integer;
  fs : TFileStream;
  sByte : string;

begin
  fs := TFileStream.Create('...', fmOpenRead);
  try
    SetLength(sBuf,fs.Size);
    // Annahme: 16 Byte je Zeile, getrennt mit Blank
    // fs.Size*3 => Zwei Hexstellen+Blank/#13 je Quellbyte
    // fs.Size div 16 => anschliessend noch ein #10 je Zeile
    SetLength(sResult,fs.Size*3+fs.Size div 16);
    fs.Read(sBuf[1],fs.Size);
    iPos := 1;
    for i := 1 to fs.Size do begin
      sByte := IntToHex(ord(sBuf[i]),2);
      sResult[iPos] := sByte[1];
      sResult[iPos+1] := sByte[2];
      inc(iPos,2);
      if i mod 16 = 0 then begin
        sResult[iPos] := #13;
        sResult[iPos+1] := #10;
        inc(iPos,2);
      end else begin
        sResult[iPos] := #32;
        inc(iPos);
      end;
    end;
  finally
    fs.free;
  end;
  Memo1.Text := sResult;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat