一个很大的文件(250M)中,某一个字节开始连续的保存的是32位浮点数据,
 请问前辈们:如何读取 这些数据,并保存得到文本中?
             如何把在文本中修改过的数据重新存储到这个很大的文件中(替换原来的32位浮点数据)
  谢谢啦!

解决方案 »

  1.   

    var
      stream : tfilestream;
      x : real;
    begin
      stream := tfilestream.create(filename, "r+b");
      x := stream.readreal...记不清楚了,自己看看
    end;
      

  2.   

    供参考Var
     R4 : single ;
    Begin
    IO_Unit  := FileCreate( FileName_s );  //临时文件
    Lin_IO   := FileOpen(FileName , fmShareDenyWrite); // 原文件
              :     :
    FileRead(Lin_IO , R4 , 4) ; // 读入数据
    // 对R4数据进行处理
              :     :
    FileWrite(IO_Unit , R4 , 4) ; // 写入数据到临时文件中 FileClose( IO_Unit ) ;        // 将临时文件内容考到原文件中
    // 也可在一个文件中进行处理
    FileRead(Lin_IO , R4 ,  4) ; //定位到指定位置读入数据
    // 对R4数据进行处理
      :     :
    FileSeek(Lin_IO , ??? , ???) ;//返回到期读入数据处
    FileWrite(Lin_IO , R4 ,  4) ; //写入数据
      

  3.   

    en..好像 YFLK 的方法不错,不过感觉取出来的数据不太对!
      

  4.   

    哈哈,谢谢(宇)
     YFLK的方法可以,不过就是读出来的数据不对,
      

  5.   

    我找到了一个例子function ReverseString(const AText: string): string;
    var
      I: Integer;
      P: PChar;
    begin
      SetLength(Result, Length(AText));
      P := PChar(Result);
      for I := Length(AText) downto 1 do
      begin
        P^ := AText[I];
        Inc(P);
      end;
    end;
    //*)function HexToStr(mHex: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 1 to Length(mHex) div 2 do
        Result := Result + Chr(StrToIntDef('$' + Copy(mHex, I * 2 - 1, 2), 0));
    end; { HexToStr }function HexToSingle(mHex: string): Single;
    var
      S: string;
    begin
      S := ReverseString(HexToStr(mHex));
      Move(S[1], Result, 4);
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    var
    s:string;begin
    s:=edit5.text;
      edit4.Text := FormatFloat('#.0000', HexToSingle(s));
    end;不过得到的结果好像也不正确,是正确结果的一半,
    那位高手能给解释一下?
     关键是对浮点的认识!
      

  6.   

    UP~~~~~~~~
    ----------------------
    《CSDN论坛新助手 CSDN's forum Explorer》
    1、更快速的浏览
    2、更方便地保存
    3、更快捷的收/发短信
    下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
    更多说明:http://community.csdn.net/Expert/TopicView.asp?id=3255966
      

  7.   

    先要定位在正确的数据处,通常用FileSeek(Lin_IO , ??? , ???) ;
    但用FileSeek后一定要保存文件当前的定位指针,以方便重新返回此处,
    对Binary数据文件的读写,必须知道数据在文件中的排列格式,对于4字节的数据,用2字节或8字节长度的变量读取一定是错的,而4字节整型值,用实型变量读取也会得到错误的结果。
      应注意变量的使用:
     用FileRead(Lin_IO , R4 , 4) ; // 读入实型数据
     用FileRead(Lin_IO , R8 , 8) ; // 读入双精度数据
     用FileRead(Lin_IO , I4 , 4) ; // 读入长整型数据
     用FileRead(Lin_IO , I2 , 2) ; // 读入短整型数据
     用FileRead(Lin_IO , I1 , 1) ; // 读入单字节数据
     用FileRead(Lin_IO , Sn , n) ; // 读入n字节字符串