按字节读取文件内容的问题。 (300分)

  • 主题发起人 HunterTeam
  • 开始时间
H

HunterTeam

Unregistered / Unconfirmed
GUEST, unregistred user!
有这么一个文件,里面的前6个字节是3个值,分别保存的是原来的值*100后的值,长度
是一个字,7-18字值又是三个值,19-30,31-42也都分别是三个值,除以1000后是真实
的数值,长度是双字。文件总长度388字节,后面的也都是一些乘以100或1000后的值。
有谁自认能用Delphi取出里面的各个值(只需取到第42字节),并把代码给我,我还可以
另加300分,请留下Email,以便我把文件发给你。
 
filestream
 
老兄,不要说得那么简单,里面的值有可能是按二进制存储的,还有如何转换等问题,
相关的代码写一些给我看看。
 
其实很简单。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

const BUF_SIZE=1024;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
f:file of byte;
implementation

{$R *.DFM}

function Str2Hex(const data: array of byte): string;
const
Hex:array[0..15] of char='0123456789ABCDEF';
var
i: Integer;
begin
setlength(result,length(data)*2);
for i := 1 to Length(data) do
begin
result[i*2-1]:=Hex[data shr 4];
result[i*2]:=Hex[data and $F];
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
j,NumRead:integer;
b:array[1..BUF_SIZE] of byte;
s: string;
begin

assignfile(f,'a');
Reset(f);
repeat
BlockRead(f,b,BUF_SIZE,NumRead);
s:=Str2Hex(b); //将每个字节以16进制表示
ListBox1.Items.Add(s);
until (NumRead = 0);
closefile(f);

ListBox1.Items.SaveToFile('a.txt');

end;

end.
 
zw84611,请先留下你的Email,等下你不在线了,我还有问题的话还可以问你。
 
zw84611@sina.com
 
你刚才转出来的是十六进制的,转十进制或将十六进制转十进制有没有现成的函数?
 
IntToHex()
我那样做是为了提高速度,见:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1370434
如果你的文件不大,直接用IntToHex()就行。
 
是十六制转十进制,而不是十进制转十六进制。
 
十六制转十进制:
StrToInt('$0A');

在字符串前加'$'或'0x'
 
现在觉得与十六进制不十六进制关系不大,关键是如何逐个值取出的问题。
 
你要明白它的存储方式
是bcd吗还是其他的方法
如果是6字节的3个数 那么2个字节一个数
dr:double ;
move(取出的字节,dr,2); 就可以得到,但一般不对,它应该是按bcd码或ascii码
 
我看来看去你这个好象是股票数据, 你定义一个记录文件啊,
 
to ugvanxk:move(取出的字节,dr,2); “取出的字节”应是什么类型的变量?
to kkyy:这是别人给我的一个文件,不是股票数据,也不是由我来定义的。
 
不过好象又不对, 因为我算了一下388字节好象不对.
 
liuyj@cbn.com.cn
 
那你取出42个字节, 然后用一个integer指针一个一个的试,
 
to kkyy:怎么取,怎么试?
 
这个问题简单,首先这些数有没有符号(都是正整数)吗?
 
不是正整数,负数倒是没有,但原值都是带小数点的。

问题主要是应该怎样打开这种文件,并可以按字节或字逐个取出它的值,这值应
是float型的。
 
顶部