delphi 讀寫txt檔案

2021-09-12 07:40:41 字數 4047 閱讀 7512

1. memo控制項讀取txt

memo1.lines.loadfromfile('e:/*/*.txt');

2.procedure newtxt(filename:string);

varf : textfile;

begin

if fileexists(filename) then deletefile(filename);

assignfile(f, filename);

rewrite(f);

writeln(f, '將您要寫入的文字寫入到乙個 .txt 檔案');

closefile(f);

end;

procedure opentxt(filename:string);

varf : textfile;

begin

assignfile(f,filename);

writeln(f, '將您要寫入的文字寫入到乙個 .txt 檔案');

closefile(f);

end;

procedure readtxt(filename:string);

varf : textfile;

str : string;

begin

assignfile(f, filename);

reset(f);

readln(f, str);

showmessage('檔案有:' +str + '行。');

closefile(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;

varf:textfile;

begin

assignfile(f, filename);

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 既可以是全路徑名,也可以僅是檔名。對於後者系統將在當前目錄下查詢。

4.讀取或寫入文字。readln方法能夠讀取一行文字,writeln方法能向檔案寫入一行文字。

5.最後用closefile方法關閉已開啟的檔案。

在這裡我們要介紹的就是如何用流來讀取txt檔案中的資料,並且在指定顯示區域顯示出來。首先讓我們通過乙個簡單範例來了解readbuffer方法,讓我們來讀取指定txt檔案的前10個字元。

procedure tform1.button1click(sender: tobject);

varmyfile: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);

varmyfile: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);

varmyfile: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

讀寫TXT檔案

1 file.writealltext 寫入內容,可以指定編碼 寫入文字使用 file.writealltext 檔案路徑 例如 d 文字.txt 待寫入文字 public static void writetxtbyfiletext string filepath,string msg 2 fil...

VB讀寫TXT檔案

private subcommand1 click 讀檔案 open d a.txt for inputas 1dim lines asstring dimnextline asstring dimi asinteger dowhile noteof 1 onerror resume next li...

javascript 讀寫txt檔案

讀檔案 var fso,f1,ts var forreading 1 fso new activexobject scripting.filesystemobject ts fso.opentextfile document.all.attachfile.value 此處為含全部路徑的檔名 forr...