Einzelnen Beitrag anzeigen

Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Anzahl von Bytes aus Datei ausschneiden/löschen

  Alt 14. Mär 2007, 11:43
Hallo,

geht es so? Im Memo sieht es aber wegen fehlender Steuerzeichen etwas komisch aus.

Delphi-Quellcode:
function PosEx_(const SubStr, S : String; Offs: integer = 1): integer;
begin
  Result:= 0;
  if (Offs> 0) and (Offs<= length(S))then
  begin
    Result:= Pos(SubStr, string(@S[Offs]));
    if Result> Length(S)- Offs then
      Result:= 0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var fs: tfilestream;
    buffer, Pfad, WVerarbeitung: AnsiString;
    Anfang, Ende: integer;
begin
  Pfad:= 'c:\Test.csa';
  if FileExists(Pfad) then
  begin
    fs := TFileStream.Create(Pfad, fmOpenRead);
    try
      SetLength(Buffer, fs.Size);
      fs.Seek(0, soFromBeginning);
      fs.Read(buffer[1], length(buffer));
      WVerarbeitung:= '';
      Anfang:= pos('@@DOCUWARE_', buffer);
      Ende:= PosEx_( '@@', buffer, Anfang+ 10);
      while (Anfang<> 0) do
      begin
        WVerarbeitung:= WVerarbeitung+ Copy(buffer, Anfang, Ende+ 11);//+#13#10;
        Delete(buffer, Anfang, Ende+ 11);
        Anfang:= pos('@@DOCUWARE_', buffer);
        Ende:= PosEx_( '@@', buffer, Anfang+ 10);
      end;
      caption:= 'Ausgeschnittene Länge= '+ inttostr(length(WVerarbeitung))+ ' Bytes';
      Memo1.Lines.Text:= WVerarbeitung;
    finally
      fs.free;
    end;
      fs := TFileStream.Create(ChangeFileExt(Pfad, '.pcl'), fmCreate);
      try
        fs.Seek(0, soFromBeginning);
        fs.Write(buffer[1], length(buffer));
      finally
        fs.Free;
      end;
  end;
end;
Mein Delphi 6 hat leider kein PosEx.

EDIT: Der geänderte Inhalt vom buffer wird jetzt als "PCL" Datei abgespeichert.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat