naoga

delphi2010读写txt文件

1. memo控件读取txt
memo1.Lines.LoadFromFile('E:\*\*.txt');
2.
Procedure NewTxt(FileName:String);
Var
F : Textfile;
Begin
if fileExists(FileName) then DeleteFile(FileName); {看文件是否存在,在就刪除}
AssignFile(F, FileName); {将文件名与变量 F 关联}
ReWrite(F); {创建一个新的文件并命名为 ek.txt}
Writeln(F, '将您要写入的文本写入到一个 .txt 文件');
Closefile(F); {关闭文件 F}
End;
Procedure OpenTxt(FileName:String);
Var
F : Textfile;
Begin
AssignFile(F,FileName); {将文件名与变量 F 关联}
Append(F); {以编辑方式打开文件 F }
Writeln(F, '将您要写入的文本写入到一个 .txt 文件');
Closefile(F); {关闭文件 F}
End;
Procedure ReadTxt(FileName:String);
Var
F : Textfile;
str : String;
Begin
AssignFile(F, FileName); {将文件名与变量 F 关联}
Reset(F); {打开并读取文件 F }
Readln(F, str);
ShowMessage('文件有:' +str + '行。');
Closefile(F); {关闭文件 F}
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
NewTxt;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
OpenTxt;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ReadTxt;
end; 

------------------------------------------------------------------
Procedure AppendTxt(Str:String;FileName:String);
Var
   F:Textfile;
Begin
AssignFile(F, FileName);
Append(F);
Writeln(F, Str);
Closefile(F);
End;

3.Delphi 用流来读取TXT文件
TXT文本文件是一种以ACSII吗存储数据的文件。在TXT文件中只能够存储一些字符数据,所以这种文件的移植性和通用性很强,具有较高的易用性,并且 被广泛应用,所以Delphi对该类型文件提供了较好的支持。目前在Internet上最为流行的XML文件也是一种文本文件。TXT文本文件的操作非常 简单,具体操作过程如下: 
1.首先要声明一个TextFile类型的的文件指针。如:var MyFile:TEXTFile。 
2.然后使用AssignFile方法将声明的文件指针与外部TXT文件相关联。AssignFile (FileName ) ;FileName 既可以是全路径名,也可以仅是文件名。对于后者系统将在当前目录下查找。 
3.初始化读写有三种方式: Reset为读打开文件并把文件指针移动到文件首;Rewrite为写创建一个新文件;Append为写打开存在的文件并把文件指针定位在文件尾。 
4.读取或写入文本。Readln方法能够读取一行文本,writeln方法能向文件写入一行文本。 
5.最后用Closefile方法关闭已打开的文件。 
在这里我们要介绍的就是如何用流来读取TXT文件中的数据,并且在指定显示区域显示出来。首先让我们通过一个简单范例来了解ReadBuffer方法,让我们来读取指定TXT文件的前10个字符。 
procedure TForm1.Button1Click(Sender: TObject); 
var 
MyFile:TMemoryStream; 
Filebuf: array[1..10] of char; //这里声明的是静态数组 
a:string; 
Begin 
If opendialog1.Execute then 
begin 
MyFile:=TMemoryStream.Create;//创建流 
MyFile.LoadFromFile(opendialog1.FileName); 
MyFile.ReadBuffer(Filebuf,10);//读取TXT文件前10个字符 
a:= strpas(Filebuf) //将数组转化成为字符串 
Form1.canvas.Textout(0,0,a); //在显示区域上显示字符串 
FreeAndNil(MyFile);//释放流 
end; 
end; 
以上范例在窗体Form1上显示的字符串就是打开TXT文本的前10个字符,但是如何得到文本的所有数据呢?这里就需要用到动态数组。动态数组在流中 的应用是个难点,因为Delphi中的静态数组是在运行前就已经将内存空间分配好,所以它的变量地址就是数组的第一维地址,即没有描述部份,故它的 sizeof为1个字节,而动态数组是在运行期间动态分配一个内存块,所以它的变量地址部分需要一个描述部分,故它的sizeof为四个字节,用于存放描 述表,所以在用 Readbuffer方法时,需要采用数组的第一维地址为起始地址,才不会导致内存溢出。下面这个范例就是用流来读取TXT文件中的全部数据。 
procedure TForm1.Button1Click(Sender: TObject); 
var 
MyFile:TMemoryStream; 
Filebuf: array of pchar; //这里声明的是动态数组 
iLen:Int64; 
Begin 
If opendialog1.Execute then 
begin 
iLen:=0; 
MyFile:=TMemoryStream.Create; 
MyFile.LoadFromFile(opendialog1.FileName); 
iLen:=MyFile.Size;//获得指定TXT文件的大小 
SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 
MyFile.ReadBuffer(FileBuf[0],iLen);//读取TXT文件全部数据 
Form1.canvas.Textout(0,0,string(FileBuf)); //在显示区域上显示字符串; 
FreeAndNil(MyFile); 
end; 
end; 
以上的范例可在窗体Form1上显示指定TXT文件的全部数据。 
现在让我们来研究一下如何从TXT文本中的指定位置读取一定量的数据,这里用到的函数就是seek(offset:integer,origin:word)integer; 它的参数所代表的意义: offset是偏移量; 
而origin是计算方式 ,下面三个就是origin的值,soFromBeginning是从文件头开始计算,soFromCurrent是从当前位置开始计算,而soFromEnd Offset是从最后位置开始计算。 
下面这个范例就是从TXT文本中的指定位置取一定量的数据 
procedure TForm1.Button1Click(Sender: TObject); 
var 
MyFile:TMemoryStream; 
Filebuf: array of pchar; //这里声明的是动态数组 
iLen:Int64; 
Begin 
If opendialog1.Execute then 
begin 
iLen:=0; 
MyFile:=TMemoryStream.Create; 
MyFile.LoadFromFile(opendialog1.FileName); 
iLen:=MyFile.Size; 
SetLength(FileBuf,1024);//设置动态数组的长度; 
Myfile.Seek(1024, soFromBeginning);//从文件头开始计算到1024个字节处 
MyFile.ReadBuffer(FileBuf[0],1024);//从seek设置的当前位置往后读取1024字节 
Form1.canvas.Textout(0,0,string(FileBuf)); //在窗体上显示; 
FreeAndNil(MyFile); 
end; 
end .

评论