Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

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

  Alt 14. Mär 2007, 10:37
Hallo Bea,

falls die Dateien klein genug für den Hauptspeicher sind:

Delphi-Quellcode:
program dw;

{$APPTYPE CONSOLE}

uses
  StrUtils,
  Classes,
  SysUtils;

var
  fn: TFileName;

procedure ProcessFile(fn: TFileName);
const
  UEL = #27'%-12345X';
  DWIND = '@@DOCUWARE';
var
  ss: TStringStream;
  fs: TFileStream;
  iBegin, iEnd, nSize: Integer;
begin
  ss := TStringStream.Create('');
  fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
  ss.CopyFrom(fs, 0);
  fs.Free;

  fs := TFileStream.Create(ChangeFileExt(fn, '.pcl'), fmCreate);
  ss.Position := 0;
  while ss.Position < ss.Size do
  begin
    iBegin := PosEx(UEL + DWIND, ss.DataString, Succ(ss.Position));
    if iBegin > 0 then
    begin
      nSize := Pred(iBegin) - ss.Position;
      fs.CopyFrom(ss, nSize);
      iEnd := PosEx(UEL, ss.DataString, iBegin + Length(UEL + DWIND));
      ss.Position := Pred(iEnd) // + Length(UEL) // kleiner Fehler große Wirkung - sorry
    end else
      fs.CopyFrom(ss, ss.Size - ss.Position);
  end;
  ss.Free;
  fs.Free;
end;

begin
  if (ParamCount <> 1) then
    WriteLn('Aufruf: dw file[.csa]') else
  begin
    fn := ParamStr(1);
    if ExtractFileExt(fn) = 'then
      fn := fn + '.csa';
    if FileExists(fn)
      then ProcessFile(fn)
      else WriteLn('Datei nicht gefunden: ', fn);
  end;
end.
Getippt und nicht getestet.

Freundliche Grüße
  Mit Zitat antworten Zitat