program chop; {$apptype console} uses Windows, Sysutils, Classes; function chopeof(const filename: string): boolean; var S: TFileStream; c: byte; begin result := false; if ParamCount <> 1 then raise EInOutError.Create('操作対象ファイルが指定されていません'); if not FileExists(filename) then raise EInOutError.CreateFmt('"%s" が見つかりません', [filename]); S := TFileStream.Create(filename, fmOpenReadWrite or fmShareExclusive); try if S.Size = 0 then exit; S.Seek(-1, soFromEnd); S.Read(c, 1); if c <> $1a then exit; S.Size := S.Size -1; result := true; finally S.Free; end; end; var filename: string; begin try filename := ParamStr(1); if not chopeof(filename) then ExitCode := 1; except on E: Exception do begin writeln(E.message); filename := ParamStr(0); filename := ChangeFileExt(ExtractFileName(FileName), ''); writeln('使用方法: ', filename, ' target'); writeln(' ファイルの終端に ^Z(0x1A) が あれば削除します'); ExitCode := 2; end; end; end.