写数据到文件,如何去掉由vb自动产生的最后哪个空行

wdthkyou 2008-05-29 08:49:15
我要生成批量数据文件,可是每个文件最后一行是空行,这是vb自动产生的,我检查输出语句,没有输出空行的命令,可是我的数据文件需要被另一个应用程序调用,它要求不能有空行,而且这个程序是上级部门下发的,我们没有源代码,所以只好自己在删除空行上努力了,谢谢大哥大姐进来指点!
...全文
217 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
上面的错了
用这个

将文件的内容存储到一个字符串变量中
比如:
dim strFileContent as String
strFileContent = "ABCDEFG........KF"
strFileContent = LEFT(strFileContent ,LEN(strFileContent)-2)
然后再把整个文件的内容(strFileContent)写到文件中去
这样就不会出现换行了
  • 打赏
  • 举报
回复
将文件的内容存储到一个字符串变量中
比如:
dim strFileContent as String
strFileContent = "ABCDEFG........KF"
strFileContent = RIGTH(strFileContent ,LEN(strFileContent)-2)
然后再把整个文件的内容(strFileContent)写到文件中去
这样就不会出现换行了
vbman2003 2008-05-29
  • 打赏
  • 举报
回复
看来我理解错了.....
估计是还是你生成文件有问题吧?还是检查文件生成的代码吧......
lertulo 2008-05-29
  • 打赏
  • 举报
回复
三樓正解。。。
全部寫出,然後再刪除。
vbman2003 2008-05-29
  • 打赏
  • 举报
回复
用strreverse倒置输出文本,再用replace替换掉第一个vbcrlf,再用strreverse倒置回来:
dim s as string
s="你的输出文本"
s=strreverse(replace(trim(strreverse(s)),vbcrLf,"",1,1))
三楼の郎 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Tiger_Zhao 的回复:]
按下面的方式,自己控制一下Print时是否输出回车。

VB codeSub Main()
Dim hFile As Integer
hFile = FreeFile()
Open "C:\a.txt" For Output Access Write As #hFile
Print #hFile, "第一行(有回车)"
Print #hFile, "第二行(无回车)";
Close #hFile
End Sub
[/Quote]

改成:
print #hfile,"第一行"
print #hfile,vbcrlf & "第N行"

从判断是否最后一行改成判断是否第一行,如果不是第一行,那么在输出时在行前面加一个回车换行,否则不加。笨!
wdthkyou 2008-05-29
  • 打赏
  • 举报
回复
暂且如此,再放一天吧,看有没有更好的办法!
  • 打赏
  • 举报
回复
第一行
Print #hFile, "第一行(无回车";
Print #hFile, vbcrlf;"第二开始行(先回车再输出正文一行结束不要回车)";
onlineboy 2008-05-29
  • 打赏
  • 举报
回复
笨办法,分2次完成,第一次生成文件,第二次再将第一次的文件的最后一个回车删除
wdthkyou 2008-05-29
  • 打赏
  • 举报
回复
按照大虾的(无回车)的方式,全部数据写到一行上了!可是我只想避免最后一行不产生空行(没有数据,也没有换行符或回车符),如果我能事先知道共有多少行数据,我就可以采用大虾方式,可是我现在的批量数据没有办法事先确知,因为我得判断该行数据是否有效等问题,这必然导致不能事先确知谁是最后一行!谢谢大虾的指点,我再想其他办法了。有一个不怕麻烦的思路:再次打开输出文件,处理掉最后的换行符或回车符再输出!这里我想求一个一步到位的好法子,谢谢大家指点!
Tiger_Zhao 2008-05-29
  • 打赏
  • 举报
回复
按下面的方式,自己控制一下Print时是否输出回车。
Sub Main()
Dim hFile As Integer
hFile = FreeFile()
Open "C:\a.txt" For Output Access Write As #hFile
Print #hFile, "第一行(有回车)"
Print #hFile, "第二行(无回车)";
Close #hFile
End Sub
wdthkyou 2008-05-29
  • 打赏
  • 举报
回复
谢谢大家指点!结帖了。
RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使创建压缩文件时指定了 .zip 扩展名,它仍然是 RAR 格式的。Windows 用户 可以 WinRAR,它支持更多的压缩文件类型,包括 RAR 和 ZIP 格式。 WinRAR 提供了图形用户界面和命令行模式。虽然控制台 RAR 和图形界面 WinRAR 有相似的命令行语法,但是它们还有有一些不同。所以推荐使用此 rar.txt 手册用于 控制台 RAR(rar.exe 在 Windows 版本的情况下),winrar.chm 是图形界面 WinRAR (winrar.exe) 的帮助文件。 配置文件 ~~~~~~~~ Unix 版本的 RAR 从用户的 home 或 /etc 目录中的 .rarrc 文件读取配置文件信息 (存储在 HOME 环境变量中) Windows 的版本 RAR 从 rar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录中。 这个文件包含下列字符串: switches=任何 RAR 开关,用空格分开 例如: switches=-m5 -s 环境变量 ~~~~~~~~ 可以通过建立"RAR"环境变量来添加默认参数到命令行中. 例如,在 Unix 中,下列命令行可以被添加到你的配置中: RAR='-s -md1024' export RAR RAR 将使用这个字符串作为命令行的默认参数,并将使用 1024KB 字典大小来创建 “固实”压缩文件。 RAR 控制选项使用下列优先级: 命名行开关 最高优先级 在 RAR 变量中的开关 低优先级 保存在配置文件中的开关 最低优先级 日志文件 ~~~~~~~~ 如果在命令行或配置文件中指定开关 -ilog ,RAR 将会把处理压缩文件中遇到的错误 等到日志文件中。读取开关 -ilog 描述获得更多信息。 固实压缩的文件列表 - rarfiles.lst ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rarfiles.lst 包含一个用户定义的文件列表,告诉 RAR 添加文件到固实压缩文件时的顺 序。它可以包含文件名通配符和指定项目 -$default。默认项目定义了这个文件中与 其他项目不相符时的顺序清单位置。 注释字符是 ';'. 在 Windows 中,这个文件应该放在 RAR 所在的或 %APPDATA%\WinRAR 目录中, 在 Unix 中- 放在用户的 home 目录或在 /etc 中。 提高压缩率和操作速度的提示: - 在压缩文件中,小文件应该被组织在一起; - 频繁被处理的文件应该放在开始的位置。 普通的掩码越靠近顶端优先权就越高,但是这个规则存在例外。如果 rarfiles.lst 包含两个掩码,并且所有文件既匹配第一个掩码,也匹配第二个掩码, 较小的子集 或者更精确的匹配拥有更高的优先权。例如,如果你用 *.cpp 和 f*.cpp 掩码, f*.cpp 拥有更高的优先权。 RAR 命令行语法 ~~~~~~~~~~~~~~ 语法 RAR [ - ] [ ] [ ] [ ] 描述 命令行选项 (命令和开关) 提供了使用 RAR 创建和管理压缩文件的控制方法。命 令是一个字符串(或单个的字母),命令 RAR 去执行一个相应的操作。开关被用来 改变 RAR 执行操作的方法。其它参数是压缩文件名和被压缩的文件或要从压缩文件 中被解压文件。 列表文件是一个包括处理的文件名的纯文本文件。第一列应该以文件名开始。可以 在//字符后添加注释。例如,你可以创建包含下列字符串的 backup.lst: c:\work\doc\*.txt //备份文本文档 c:\work\image\*.bmp //备份图片 c:\
Lephone Loczlize Plus 1.06 中文注册版是一个本地化工具,主要用于非资源格式的本地化工作,支持的种类包括非资源格式的 C 编译的程序中的 ASCII 字符串和 UniCode 字符串、非资源格式的 Delphi(C++ Builder)编译的程序的字符串、VB 编译的程序的字符串、文本格式的字符串等的提取及替换。同时它还拥有方便的版本升级功能、字典处理功能,使您在翻译新版本时事半功倍。本软件提供英文、简体中文和繁体中文三种语言选择,并且您也可以很方便的添加对其它语言的支持。 Win98/Me/2000/XP/Vista 可以直接运行本软件,Win95/NT4 需要安装 VB6 运行库。你可以在微软的站点下载它。 本软件主要用于非资源格式的本地化工作,对于资源格式的本地化工作,虽然也可以使用本工具处理,但因为无法做到大于源字串的替换,所以推荐使用其它一些工具(如 Visual C++、ResHacker 等)处理。 本软件的每一个界面上都有一段说明,在使用其功能之前,请先阅读这些说明。 对于所有的功能,其中所说的“对照文件”和“字典文件”都忽略空行,所以可以随意添加空行,不过只有空格的行不被视为空行,而“对照文件”中的其它行以如下格式重复: 偏移量:源字串 修改后的字串 “偏移量”用十进制表示,一般应由程序自行填,用户不要再做修改;“源字串”也一样由程序自行填,用户也不要再做修改。 而“字典文件”中的其它行以如下格式重复: 源字串 修改后的字串 同样的,“源字串”也由程序自行填,用户不要再做修改。 另外,所有对可执行文件进行的替换工作,都不能进行长于源字串的替换,如果修改后的字串长于源字串,本程序将自动剪裁以便和源字串长度相同。如果短于源字串,将会以十六进制数“00”或空格(在“替换字串”界面上选择“多余补空格”)填充空余。 对于 VB 和 Delphi 编译的程序,因为有字串长度计数器,所以使用其专用功能不仅能提高查找的准确性,而且替换后的程序的兼容性也会更好,故推荐对于它们使用其专用的查找和替换功能。 本工具约定,VB 格式的 UniCode 的对照文件的扩展名是“.txt”,Delphi 格式的 ASCII 对照文件的扩展名是“.d.txt”, UniCode 格式的对照文件的扩展名是“.u.txt”,而 ASCII 格式的对照文件的扩展名是“.a.txt”。这四种对照文件的格式完全相同。程序会根据所选文件名判断它的类型,虽然用户仍然可以更改类型,不过还是建议使用约定的扩展名。 因为本程序在替换的时候做源字串的检测,所以选错类型一般不会造成不可挽回的后果,不过还是慎重为好。 对于 UniCode 和 ASCII 的查找,并没有前缀作为判断标志,所以如果一个字串的实际长度大于所选的最大长度,则采取右截取的方式。比如实际字串“Text”,而最大长度选择“3”,则提取此字串为“ext”。 对于内含回车换行的字串,使用替换方式进行处理,如下: 对于内含回车换行的字串,使用替换方式进行处理,如下: 回车 替换成 \r 换行 替换成 \n \ 替换成 \\ ” 替换成 \” Tab 替换成 \t “翻译新版本”时,既可以使用“字典文件”,也可以使用“对照文件”。而“对照文件”可以使用“偏移量方式”的“分割对照文件”功能得到“字典文件”。 本程序查找时没有进度条指示进度,不过用户可以预估查找时间。在 P200 上的测试数据如下:查找 UniCode (包括 VB)的速度是 1MB/s ,而查找 ASCII (包括 Delhpi)的速度是 0.5MB/s 。 对于“清除预定义项”,用户可以自行修改其同目录下的“PDef.dat”文件。而对于它,可以使用“翻译项方式”的分割方式分割对照文件,把得到的“.2”文件中想添加的项加入“PDef.dat”即可。不过就我的测试而言,“清除预定义项”的功能对于不特定软件的效果并不是很显著,当然了,对于特定的软件(把不需要的项加入了“PDef.dat”的)效果还是不错的。 对于 INI 文件需要注意的是,程序只把第一个字符是“;”的行作为注释,如果有如“属性=值;注释”这样的行,将把“值;注释”当作“值”处理。 繁简用语替换时,如果用户的使用界面是简体中文,则使用 GBK 内码,如果用户的使用界面是繁体中文,则使用 BIG5 内码,分别对应不同的字典文件,如果本软件提供的词汇量不够的话,可以自行添加。此功能不进行内码转换,所以如果需要转换内码的话,请配合使用其它软件。在字典中请尽量使用长的词汇,这样可以增加准确性。我测得的替换速度约为 50KB/s (字典文件过大时也会对速度造成影响)。
ReportMachine for delphi xe5  Report Machine目前主要能做的:   1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件 全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book, TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位 置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发 一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成 报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印, 而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以 通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的 地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分 组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程 序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动空行,每页打印数量等细节处理更完善。 二、ReportMachine版本简介: 1、VCL版:这是ReportMachine基础版本,一般以全部源码形式提供给注册用户,可以用在Delphi5-Delphi 2009,C++ Builder5.0-C++ Builder 2009开发环境中。 2、com版:是个单独的ocx文件(RMReport.ocx),是用Delphi 7.0及以上版本开发的,是对VCL版ReportMachine控件的再封装,具有VCL版的全部功能,安装、使用上更容易些,com版的ReportMachine可以用在vb,vc,vfp,pb等开发语言中。一般以ocx无源码形式提供,也可以有全部源码(包括vcl源码+ocx源码) 3、com版for .net WinForm:跟com版一样,但多了个.net下的数据库接口程序,此版可以用在vb.net,c#中,做winform程序的报表工具。一般以ocx无源码形式提供,也可以有全部源码。 4、webreport版:是对ReportMachine vcl版的再开发,用在asp,asp.net,jsp做的b/s架构的程序中,为客户端ie提供报表预览、打印、导出功能,webreport包括2部分:服务器端报表引擎(在asp,asp.net,jsp都能用,webreport对上述3中语言都开发了报表引擎)、客户端ie浏览器ActiveX插件(ActiveX插件只有一个,可以自动感知服务器端报表引擎版本)。webreport版不具备设计报表模版功能,需要用单独的报表设计程序在服务器端设计报表,也可以用本站提供的RMDesigner。 5、webreport for IntraWeb版:跟webreport版功能一样,是专为Delphi中的IntraWeb vcl提供的报表插件。 6、RMDesigner:是用vcl版ReportMachine开发的一个报表设计器,可以用来为webreport提供报表设计功能。
VB控件 RMReport7 转:RMReport的使用方法及详解 1、不打印特定的MemoView,套打常用 a.页面设置-->其它-->不打印背景图 b.设置MemoView属性printable=False 2、 如何打印wwDBGrid? 修改rm.inc,如果想支持RX,GIF,JPEG,DimandAccess,Halcyon,DBISAM, EHLib,也需要修改rm.inc //{$DEFINE InfoPower} //修改这行,去掉"//" //{$Ehlib} 3.试用版安装方法(以下假设将文件释放到c:/rm目录中) (1)Tools->Environments Option->Libary->Libary Path中增加: c:/rm/souce c:/rm/bpl $(DELPHI)/Lib $(DELPHI)/Bin $(DELPHI)/Imports $(DELPHI)/Projects/Bpl (2)Component->Install Packages->Add,选bpl/rm_d70.bpl 4.在Delphi IDE中卸载以前的Report Machine版本,然后打开rm_r50.dpk,选"compile", 在打开rm_d50.dpk,选"Install". 包分成了Runtime package和Designer package,所以要安装顺序安装 5、单元格的变量格式用代码设置 t = TRMGridReportPage(RMGridReport1.Pages[0]).Grid.Cells[1, 1].View t = TRMMemoView(RMReport1.FindObject('memo1')); t.DisplayFormat := 'N0.001' //数字型 t.DisplayFormat := 'Dyyyy/mm/dd' //日期型 6、两遍报表如何用代码设置 GridReport1.DoublePass := True 7、用代码数据字典: RMReport1.Dictionary.FieldAliases.Clear; RMReport1.Dictionary.FieldAliases['RMDBDataSet1'] := '动物'; RMReport1.Dictionary.FieldAliases['RMDBDataSet1."Name"'] := '姓名'; 这样在RM的设计器显示为自定义名称,为最终用户提供友好的显示 8、在报表中如何使用变量(或者如何给某个memoview赋值) a.RMVariables在RM_Class.pas中定义,是全局变量,这样定义后就可以在报表中使用变量"var1",例如: RMVariables['变量名称'] := Edit1.Text; b.用报表中数据字典,TRMReport.Dictionary.Variables,需要注意的是,如果变量是字符型的需要用AsString赋值,其他类型的用RMReport.Dictionary.Variables['var1'] := 1234,例如: RMReport1.LoadFromFile('1.rls'); RMReport1.Dictionary.Variables.AsString['变量名称'] := Edit1.Text; c. 直接对某个单元格赋值,例如: RMGridReport1.LoadFromFile('1.rls'); TRMGridReportPage(RMGridReport1.Pages[0]).Grid.Cells[1,1].Text := '值'; 如果是RMReport: RMReport1.LoadFromFile('1.rmf'); t := RMReport1.FindObject('Memo1'); if t nil then // var t: TRMView t.Memo.Text := 'dsdsdsds'; d.脚本中直接引用Form的值 procedure Main; begin Memo1.Memo.Text := Form1.Edit1.Text; end; 9、自动换行 主项数据栏Stretched = true 文本框 Stretched = true WordWrap = true 10、RM内置变量(Script),增加中.... a.属性PrintAtAppendBlank=True CurReport.AppendBlanking=True时代表增加空行 在RM中,打印设置只能保存页面边距及打印份数、是否两遍打印以及

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧