Registriert seit: 6. Apr 2005
10.109 Beiträge
|
Re: Anzahl von Bytes aus Datei ausschneiden/löschen
14. Mär 2007, 11: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
|
|
Zitat
|