Delphi 一个分割文本文件的代码


本文整理自网络,侵删。

 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := '10'; //10 KB
  Edit1.NumbersOnly := True;
  OpenDialog1.Filter := 'TEXT|*.txt|*.*|*.*';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  ms: TMemoryStream;
  path: string;
  size,sizeEnd,count,i: Integer;
  c: Char;
begin
  if OpenDialog1.Execute then path := OpenDialog1.FileName;
  if not FileExists(path) then Exit;

  fs := TFileStream.Create(path, fmOpenRead);
  fs.Read(c, 1);
  if CharInSet(c, [#$EF, #$FE, #$FF]) then
  begin
    ShowMessage('只适用于 ANSI 格式的文本文件');
    fs.Free;
    Exit;
  end;

  TButton(Sender).Enabled := False;
  size := StrToIntDef(Edit1.Text, 10) * 1024;
  count := fs.Size div size;
  sizeEnd := fs.Size mod size;
  if sizeEnd > 0 then Inc(count);

  ms := TMemoryStream.Create;
  fs.Position := 0;
  for i := 0 to count - 1 do
  begin
    Text := Format('%d/%d', [i+1, count]);
    Application.ProcessMessages;
    if (i = count - 1) then size := sizeEnd;
    ms.Size := size;
    fs.Read(ms.Memory^, size);
    ms.SaveToFile(Format('%s_%.3d.txt', [ChangeFileExt(path, ''), i+1]));
    fs.Position := size * (i+1);
  end;
  fs.Free;
  ms.Free;
  TButton(Sender).Enabled := True;
  Text := '完成';
end;

end.

相关阅读 >>

Delphi 如何快速读取非常大的文本文件

Delphi winapi: getwindowtextlength - 获取窗口标题长度

Delphi rs232c串行通讯接口的应用

Delphi trect的宽和高

Delphi 向其他程序发送模拟按键

Delphi 给动态数组添加一个元素

Delphi驱动方式winio模拟按键

Delphi生成32位随机数

Delphi firemonkey的stylebook皮肤控件的使用

Delphi 英文单词第一个字母大写

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...