如果文件中间包含0字符,那么用TStrings处理时到0字符处结束,现在想办法将文件数据加载到Stream中预处理一下,将中间的0字符删除掉,再来进一步处理。
各位有什么办法将0字符从Stream中删除?

解决方案 »

  1.   

    这种处理的方法很多:
    var
    s:char;
    fs:tfilestream;
    tem:array of byte;//交换区
    ps:integer;
    begin
    ...
    fs.readbuf(s,sizeof(s));
    if s='0' then
     begin
     fs.seek(-1,fs.postion);//把指针向上,删除 0 字符
     ps:=fs.position        //记录当前位置
     setlength(tem,fs.size-fs.position);//设定buf长度
     zeromemory(tem,length(tem));       //buf晴0
     fs.readbuf(tem,length(tem));       //剩下的读入buf
     fs.seek(ps,0);                     //指针回去
     fs.writebuf(tem,length(tem));      //重新写入fs完成清0字符的整体动作
    ...
    ...
    end;
    ///但是非常不建议这么做因为io的读写操作费时费事
    //可以用tlist建立指针buf,
    //删除用tlist.delete;
    //然后写入流或者buf
    最好不用预处理,在处理的过程中直接处理
    //不知道对你有没有用
      

  2.   

    如果ASCII码为20的就简单了,可惜不是20
      

  3.   

    to baiduan(-_-小猩猩 @_@ 大金刚-_-) 
    如果是20就不用流这么复杂了,呵呵
      

  4.   

    的确非常麻烦,幸好文件里面的ASCII码为0的字符不多,被我手动删除掉了。
    流本来是适合块操作的,这样做效率的确不高。
    谢谢金刚!