如何用文件流(或者内存流)读取2进制文件,反过来再以文本文件储存在磁盘上? ( 积分: 100 )

  • 主题发起人 主题发起人 witkey
  • 开始时间 开始时间
谁能解决这段代码出现的问题。
=======================================
program read_pent
implicit none
integer, parameter:: Mtm=8
integer, parameter:: Lx=144,Ly=73
integer, parameter:: M_memb =20
real clim(Lx,Ly,Mtm)
real workc(Lx,Ly,Mtm,M_memb)
integer I,J,L,Km,memb
integer Len_FNO
character FNO*256

FNO='DML1982076H500KS1.20'
!-------计算成员数
Len_FNO=len_trim(FNO)
memb=(ichar(FNO(Len_FNO-1:Len_FNO-1))-48)*10+ichar(FNO(Len_FNO:Len_FNO))-48
!----------------------------
open(unit=45,file=trim(FNO),form='unformatted',status='old')
clim=0.0
workc=0.0
do L=1,Mtm
read(45) ((clim(I,J,L),I=1,LX),J=1,LY)
!可以编译,但是在运行到这里的时候却说与文件数据没有连接上。
end do
do Km=1,memb
do L=1,mtm
read(45)((workc(I,J,L,Km),I=1,LX),J=1,LY)
end do
end do
close(45)
open(unit=60,file='aa.txt',status='Replace')
do L=1,Mtm
write(60,66)((clim(I,J,L),I=1,LX),J=1,LY)
end do
do Km=1,memb
do L=1,mtm
write (60,66)((workc(I,J,L,Km),I=1,LX),J=1,LY)
end do
end do

close(60)
66 format(1x,10F8.1)
stop
end
 
function MStreamToStr(SourceStream:TStream;var TargetString: String):Boolean;
var
abBuf: Array [0..255] of Byte;
iReadCnt: Integer;
iP: Integer;
begin
try
iReadCnt := SourceStream.Read(abBuf,SizeOf(abBuf));
while iReadCnt > 0 do
begin
for iP := 0 to iReadCnt - 1 do
begin
TargetString := TargetString + IntToHex(abBuf[ip],2);
end;
end;
Result := True;
except
Result := False;
end;
end;


把String改成Stream
然后在调用的时候
TStringStream(TargetStream).DataString := TStringStream(TargetStream).DataString + IntToHex(abBuf[ip],2);
 
to iamy
您好!先谢谢您。
您提供的这段代码的意思,是不是把内存流的数据,变成可以直接在,比如用String类型数据,用TMemo控件可以看到的文本类型的数据(或者是ACSII码数据)。
如果是这样那就最好了!
我研究研究这段代码。因为数据流的封装的属性我不是很熟悉!
再次感谢。
 
后退
顶部