文件插入,合并问题?(100分)

  • 主题发起人 主题发起人 raoeeeee
  • 开始时间 开始时间
R

raoeeeee

Unregistered / Unconfirmed
GUEST, unregistred user!
现有程序var
srcfile,desfile:file;
read,sum:integer;
buffer:array [1..4] of byte;
begin
assignfile(srcfile,'d:/911911/600692.day');
assignfile(desfile,'d:/911911/600691.day');
reset(desfile,1);
reset(srcfile,1);
sum:=0;
//seek(srcfile,filesize(srcfile));
seek(srcfile,filesize(srcfile));
repeat
blockread(desfile,buffer,sizeof(buffer),read);
blockwrite(srcfile,buffer,sizeof(buffer));
until read=0;
closefile(desfile);
closefile(srcfile);
但是假设600692,600693的文件大小都是40字节,合并之后应为80字节,但为84字节,为何?
多出的4字节哪来的?
 
是不是插入多余的空格和回车?或者其它的控制符?
 
你的程序不对啊,
buffer怎么只有4字节?
 
>>合并之后应为80字节
对吗 文件结尾有控制符的
用do
s 查了吗,windows 的结论常常不精确
文件的长度不一定是 4 的整数倍
buffer设成1字节,试试
 
>> blockread(desfile,buffer,sizeof(buffer),read);
>> blockwrite(srcfile,buffer,sizeof(buffer));
当Read为0时,还会执行下一句写入Sizeof(Buffer)个字节
改为:blockwrite(srcfile,buffer,read);

 
如果我要
进行两个文件的合并操作,但不是简单的和并操作:
在一个文件中插入另一个文件中满足某些特定条件的信息,而且若在第一个文件中有第二个文件
中的重复内容要删除(即合并之后不能有相同的内容)最快的方法是什么?
 
附加功能 将问题提前
 

repeat
blockread(desfile,buffer,sizeof(buffer),read);
blockwrite(srcfile,buffer,read);//当 read<sizeof(Buffer) 时才不会多写入其它字符
until read=0;
即可
 
blockread(desfile,buffer,sizeof(buffer),read);
repeat
blockwrite(srcfile,buffer,sizeof(buffer));
blockread(desfile,buffer,sizeof(buffer),read);
until read=0;
要满足你的那个特殊要求可能用数据库更好。
 
repeat
blockread(desfile,buffer,sizeof(buffer),read);
blockwrite(srcfile,buffer,sizeof(buffer));
until read=0;
repeat语句总是执行N+1次的,用WHILE语句。
 
不管读入多少你都写入sizeof(buffer)当然会多出来了(4-7字节)!
循环的终止条件也应该改一下:
repeat
blockread(desfile,buffer,sizeof(buffer),read);
blockwrite(srcfile,buffer,read);
until read<sizeof(buffer);
 
你跟踪一下你的程序,你第一次只写4个字,看长度是否正确
再跟踪最后一次写进行的是内容是否正确或重复?不就行了,哎,浪费100分。
 
多人接受答案了。
 
后退
顶部