如何实现缓冲区内容写入文件 |
尚未結案
|
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
恳请各位前辈帮我看看修改一下delphi 源码!
D2array=array of array of double;
D1Array=array of Stringlist; //问题1.这样写可行吗??
procedure weight(w:D2Array; n1:integer;n2:integer;name:D1Array);
//问题2.这里的n1,n2:integer; 可以合并写吗?
var
i,j:integer;
buffer:double;
fp:D1Array;
begin
fp:=TStringList.create(name,fmOpenWrite);
setlength(w,n1,n2);
for i:=0 to n1-1 do
begin
for j:=0 to n2-1 do
buffer[i*n2 j]=w[i,j];
end;
Stringlist.writeBuffer(buffer,sizeof(buffer),fp);//问题3.这样写对不?
Stringlist.Free;
setlength(buffer,0);
end;
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
我初学delphi,很多地方不懂,希望你们能多指教。
C源代码如下:
void weight(double **w,int n1,int n2,char *name)
{
int i,j;
double *buffer;
file *fp;
fp=fopen(name,"wb ");
buffer=(double*)malloc((n1 1)*(n2 1)*sizeof(double));
for (i=0;i<=n1;i )
{ for (j=0;j<=n2;j )
buffer[i*(n2 1)]=w[i][j];
}
fwrite((char*)buffer,sizeof(double),(n1 1)*(n2 1),fp);
fclose;
free(buffer);
}
请前辈帮我指出我自己改编delphi(原帖)上的错误,多谢
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言:我初学delphi,很多地方不懂,希望你们能多指教。 C源代码如下: void weight(double **w,int n1,int n2,char *name) { int i,j; /*定义整型*/ double *buffer; /*浮点指针*/ file *fp;/*定义一个文件指针*/ fp=fopen(name,"wb "); /*打开当前目录名为name的文件读写*/ buffer=(double*)malloc((n1 1)*(n2 1)*sizeof(double));/*分配内存空间*/ for (i=0;i<=n1;i ) { for (j=0;j<=n2;j ) buffer[i*(n2 1)]=w[i][j]; /*对阵列进行赋值*/ } fwrite((char*)buffer,sizeof(double),(n1 1)*(n2 1),fp);/*将(n1 1)*(n2 1)阵列写入文件中*/ fclose; free(buffer); } 上面程序意为:把一个数组(n1 1)*(n2 1)以二进制方式写入文件name中 请前辈帮我指出我自己改编delphi(原帖)上的错误,多谢 delphi: type D2Array=array of array of double; procedure TForm1.weight(w:D2Array; n1,n2:integer;FileName:pchar); var i,j:integer; FileStream : TFileStream; begin setlength(w,n1 1,n2 1); for i:=0 to n1 do for j:=0 to n2 do w[i,j]:=i*(n2 1); FileStream :=TFileStream.Create(FileName,fmCreate ); FileStream.Write(w,Sizeof(w)); FileStream.Free ; end; 转为delphi对不对,还得请其他大大参详,小弟实在才学疏浅,供参考看看 >> >>< face="Verdana, Arial, Helvetica"> ——行径窄处,留一步与人行—— 發表人 - deity 於 2004/10/19 10:12:24 |
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
多谢deity,你真的很厉害!!
1.请问*name,需要用动态数组的形式吗?
2.
type
D2Array=array of array of double; procedure weight(w:D2Array; n1,n2:integer);
var
i,j:integer;
begin
setlength(w,n1+1,n2+1);
for i:=0 to n1 do
for j:=0 to n2 do
w[i,j]:=i*(n2+1);//我觉的不是这样的,buffer[i*(n2 1)]=w[i][j];,应该给buffer赋值,buffer[0]:=w[0,1],buffer[1]:=w[0,2]
end; 麻烦你再指导一下我
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
我觉得还是不对,从整个C语言程序来看,权值w应该是已知的
void weight(double **w,int n1,int n2,char *name)其实现的的是将已知的w保存到name文件中
{
int i,j; /*定义整型*/
double *buffer; /*浮点指针*/
file *fp;/*定义一个文件指针*/
fp=fopen(name,"wb "); /*打开当前目录名为name的文件读写*/
buffer=(double*)malloc((n1 1)*(n2 1)*sizeof(double));/*分配内存空间*/
for (i=0;i<=n1;i )
{ for (j=0;j<=n2;j )
buffer[i*(n2 1)]=w[i][j]; /*对阵列进行赋值*/
}
fwrite((char*)buffer,sizeof(double),(n1 1)*(n2 1),fp);/*将(n1 1)*(n2 1)阵列写入文件中*/
fclose;
free(buffer);
}
|
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
我剛剛在研究你發問的另一個問題, 想不到我研究出來後, 那篇文章卻不見了
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type D1Array = Array of Integer; D2Array = Array of Array of Integer; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure Weight(w: D2Array; n1, n2: integer; name: String); public { Public declarations } end; var Form1: TForm1; Person: TPerson; Computer: TComputer; Stream: TFileStream; implementation {$R *.dfm} procedure TForm1.Weight(w: D2Array; n1, n2: integer; name: String); var i,j:integer; buffer:D1Array; FileStream:TFileStream; begin setlength(buffer,(n1 1)*(n2 1)); setlength(w,n1 1,n2 1); for i:=0 to n1 do begin for j:=0 to n2 do buffer[i*(n2 1) j]:=w[i,j]; end; fileStream:=TFileStream.Create(name, fmCreate); FileStream.Write(Pointer(buffer)^,sizeof(Integer)*(n1 1)*(n2 1)); fileStream.Free; end; procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; A:D2Array; fileName:string; begin fileName:='f:\study.txt'; setlength(A,3,5); for i:=0 to 2 do for j:=0 to 4 do A[i,j]:=i*5 j; Weight(A, 3, 5,fileName ); end; end.我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/10/19 18:50:40
------
我不是高手, 高手是正在銀幕前微笑的人. |
小丫123
初階會員 發表:85 回覆:62 積分:29 註冊:2004-08-31 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type D1Array = Array of Char; D2Array = Array of Array of Integer; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } procedure Weight(w: D2Array; n1, n2: integer; name: String); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Weight(w: D2Array; n1, n2: integer; name: String); var i,j:integer; buffer:D1Array; FileStream:TFileStream; begin setlength(buffer,(n1 1)*(n2 1)); setlength(w,n1 1,n2 1); for i:=0 to n1 do begin for j:=0 to n2 do buffer[i*(n2 1) j]:= IntToStr(w[i,j])[1]; end; fileStream:=TFileStream.Create(name, fmCreate); FileStream.Write(Pointer(buffer)^,(n1 1)*(n2 1)); fileStream.Free; end; procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; A:D2Array; fileName:string; begin fileName:='c:\study.txt'; setlength(A,3,5); for i:=0 to 2 do for j:=0 to 4 do A[i,j]:=i*5 j; Weight(A, 3, 5,fileName ); end; procedure TForm1.Button2Click(Sender: TObject); var MinutiaeData1, MinutiaeData2 : oleVariant; begin MinutiaeData1 := Integer(AllocMem(Button2.LRDockWidth)); end; end.我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
小丫123您好:
纠正上面所说,是如您所说,将一个两维数组,转为一维,然后保存至文件中,小弟如无谬误请指正,下面改成delphi,试试看:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type D2Array=array of array of integer; type buffer=array of integer; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure weight(w:D2Array; n1,n2:integer;FileName:pchar); end; var Form1: TForm1; buf:buffer; implementation {$R *.dfm} //调用函数weight procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; w1:D2Array; begin setlength(w1,3,2); for i:=0 to 2 do for j:=0 to 1 do w1[i,j]:=i j; weight(w1,2,1,pchar('e:\test.txt')); end; //定义函数weight procedure TForm1.weight(w:D2Array; n1,n2:integer;FileName:pchar); var i,j:integer; FileStream : TFileStream; begin setlength(buf,(n1 1)*(n2 1)); for i:=0 to n1 do for j:=0 to n2 do buf[i*(n2 1) j]:=w[i,j]; FileStream :=TFileStream.Create(FileName,fmCreate); FileStream.Write(buf,Sizeof(buf)); FileStream.Free ; end; //读取文件中的值 procedure TForm1.Button2Click(Sender: TObject); var FileStream:TFileStream; i:integer; begin memo1.Lines.Clear; FileStream :=TFileStream.Create('e:\test.txt',fmopenread); FileStream.Read(buf,Sizeof(buf)); for i:=0 to high(buf) do memo1.Lines.Add(inttostr(buf[i])); FileStream.Free ; end; end. 采取什么的方式进行保存,也就采取什么方式进行读取——行径窄处,留一步与人行—— |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
小丫123您好:
您的意思是否是打开文档,可以看到您所保存的一维数组的值,参考下列:
type D2Array=array of array of integer; type buffer=array of integer; //调用函数weight procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; w1:D2Array; begin setlength(w1,3,2); for i:=0 to 2 do for j:=0 to 1 do w1[i,j]:=i j; weight(w1,2,1,pchar('e:\test.txt')); end; //定义函数weight procedure TForm1.weight(w:D2Array; n1,n2:integer;FileName:pchar); var i,j:integer; s:TStringList; begin s:=TStringList.Create; setlength(buf,(n1 1)*(n2 1)); for i:=0 to n1 do for j:=0 to n2 do begin buf[i*(n2 1) j]:=w[i,j]; s.Add(inttostr(buf[i*(n2 1) j])); end; s.SaveToFile(filename); end; 望能早日解决——行径窄处,留一步与人行—— |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |