我们从网上粘下这类文本文件之后,有时候需要 打印留存,但在打印时却遇到了麻烦,那就是汉字中的空格成为多余。以下Delphi程序利用Memo 控件作为过渡,可删除文件中的多余空格,重新存盘后,即可方便的用Word或Wps打印输出。
1、新建一个工程,在窗体上放置如下控件:Memo1、OpenDialog1 和3个按钮(“打开”、“存盘”、“删除多余空格”),设置Memo1的属性WordWrap=False,设置“存 盘”和“删除多余空格”的属性Enabled=False。
2、编写三个按钮的事件代码。
procedureTForm1.ToolButton1Click(Sender:TObject); begin//打开一个文本文件 ifopendialog1.Executethenbegin memo1.Lines.LoadFromFile(opendialog1.FileName); caption:=DeleteBlank[+opendialog1.FileName+]; ifmemo1.Lines.Count<>0thenbegin toolbutton2.Enabled:=True; toolbutton3.Enabled:=True; end elsebegin toolbutton2.Enabled:=False; toolbutton3.Enabled:=False; end; end; end; procedureTForm1.ToolButton2Click(Sender:TObject); begin//将Memo1的内容写入原来文件 screen.Cursor:=crHourGlass; memo1.Lines.SaveToFile(opendialog1.FileName); toolbutton2.Enabled:=False; screen.Cursor:=crDefault; end; procedureTForm1.ToolButton3Click(Sender:TObject); vari,j,linecount,strlen:integer; buffer1,buffer2:string; begin//删除Memo1中的多余空格 screen.Cursor:=crHourGlass; linecount:=memo1.Lines.Count; //总行数 fori:=0tolinecount-1dobegin buffer1:=memo1.Lines[i]; iflength(trim(buffer1))=0thencontinue; //处理空白行 buffer2:=; strlen:=length(buffer1); //行长 j:=1; while(j<=strlen)and(buffer1[j]=)dobegin //跳过行首空格 j:=j+1; buffer2:=buffer2+; end; whilej<=strlendobegin buffer2:=buffer2+buffer1[j]; ifj=strlenthenbreak; //行尾则退出循环 j:=j+1; ifbuffer1[j]<>thencontinue; //不为空格,则处理下一个字符 iford(buffer1[j+1])>=$A1thenbegin //后一个为汉字,则删除这个空格 j:=j+1; continue; end; end; memo1. es[i]:=buffer2; end; toolbutton3.Enabled:=False; screen.Cursor:=crDefault; end;
3、本程序在PWin95/98,Delphi3下调试通过,由 于篇幅所限,Memo1中的显示不能自动换行,读者可自行完善。
[阿昊说:这种技巧用C来实现可能会简单些。另 外,我们只在汉字前加一个空格,后面没有。]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18