Delphi編程讀取txt文件數據
Delphi編程讀取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;
Delphi編程讀取txt文件數據到這里就結束啦。
【編輯推薦】